validar servlet formulario example bean java jsf session login facelets

java - servlet - logout jsf



¿Cómo puedo acceder al atributo de sesión en la página Facests? (1)

Implementé un formulario de inicio de sesión usando JSF y PrimeFaces. Usé este ejemplo en el sitio web de presentación PrimeFaces.

Tengo una página Facelets para mostrar una tabla de datos. Ahora necesito integrar el formulario de inicio de sesión anterior con esta página de tabla. Así que agregué algunas líneas en LoginBean.java para manejar el atributo de la sesión.

if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {//valid user and paward loggedIn = true; msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", getUsername_db()); //new lines FacesContext context2 = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) context2.getExternalContext().getSession(true); session.setAttribute("user", username); //end of new lines ...

Necesito ocultar una columna de la tabla de datos, si el usuario no ha iniciado sesión. Ahora mi problema es, ¿cómo puedo acceder al atributo de la sesión dentro de mi página Facelets?


Ha almacenado el usuario conectado como un atributo de sesión con el nombre "usuario".

Entonces está en EL disponible de la siguiente manera:

#{user}

Puede usar la palabra clave empty en EL para verificar si está presente o no (es decir, si está conectado o no) y puede usar el atributo rendered del componente JSF para indicar si debe generar o no salida HTML.

<h:panelGroup rendered="#{not empty user}"> <p>Welcome #{user}, you have been logged in!</p> </h:panelGroup>

En su caso específico de ocultar una columna de tabla, simplemente utilícela de la siguiente manera:

<p:column rendered="#{not empty user}"> ... </p:column>

Una forma más agradable de almacenar un atributo de sesión es usar ExternalContext#getSessionMap() . De esta manera, su código está libre de importaciones javax.servlet.* .

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", username);

No relacionado con el problema concreto, ¿por qué la siguiente verificación?

if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {

¿Por qué no simplemente haces un SELECT ... FROM user WHERE username=? AND password=? SELECT ... FROM user WHERE username=? AND password=? en SQL? ¿O no confías en el DB que devuelve la fila correcta?