Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/03/2015, 17:07
jelastic
 
Fecha de Ingreso: diciembre-2014
Ubicación: Lima
Mensajes: 68
Antigüedad: 9 años, 5 meses
Puntos: 0
Exclamación No puedo mantener la sesion en jsf

Hola a todos, estoy trabajando con hibernate y PrimeFaces, termine un login, que funciona corrrectamente, y me redirecciona al menu de mi sistema, pero cuando intento acceder a otra pagina me regresa al login, adjunto mi codigo

pagina XHTML
Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml"
  2.     xmlns:ui="http://java.sun.com/jsf/facelets"
  3.     xmlns:h="http://java.sun.com/jsf/html"
  4.     xmlns:f="http://java.sun.com/jsf/core"
  5.     xmlns:p="http://primefaces.org/ui">
  6.    
  7.     <f:loadBundle basename="com.jonathan.msgs.message" var="msgs"/>
  8.  
  9. <h:head>
  10.     <title>#{msgs.titulo_login}</title>
  11.     <link href="#{appBean.baseUrl}resources/css/login.css" type="text/css"
  12.         rel="stylesheet" />
  13. </h:head>
  14. <h:body>
  15.     <div class="conteiner">
  16.         <p:growl id="growl" sticky="true" showDetail="true" life="3000" />     
  17.        
  18.         <h:form id="formLogin">
  19.             <p:panel id="basic" header="Login" style="margin-bottom:20px">
  20.                 <h:panelGrid columns="2" cellpadding="10">
  21.                     <h:panelGrid columns="2" cellpadding="5">
  22.                         <h:outputLabel for="username" value="#{msgs.log_usuario}" />
  23.                         <p:inputText id="usuUsuario" value="#{loginBean.usuario.usuUsuario}" required="true"
  24.                             label="#{msgs.log_usuario}" />
  25.  
  26.                         <h:outputLabel for="password" value="#{msgs.log_password}" />
  27.                         <p:password id="usuPassword" value="#{loginBean.usuario.usuPassword}" required="true"
  28.                             label="#{msgs.log_password}" />
  29.  
  30.                         <f:facet name="footer">
  31.                             <p:commandButton value="#{msgs.log_entrar}" update=":growl"
  32.                                 actionListener="#{loginBean.login(actionEvent)}"
  33.                                 oncomplete="handleLoginRequest(xhr, status, args)" icon="ui-icon-key" />
  34.                         </f:facet>
  35.                     </h:panelGrid>
  36.                 </h:panelGrid>
  37.             </p:panel>
  38.         </h:form>
  39.     </div>
  40.  
  41.     <script type="text/javascript">
  42.         function handleLoginRequest(xhr, status, args) {
  43.             if (args.validationFailed || !args.loggedIn) {
  44.                 jQuery('#formLogin').effect("shake", {times: 5}, 1000);
  45.             }
  46.             else {
  47.                 location.href = args.ruta;
  48.             }
  49.         }
  50.      </script>
  51. </h:body>
  52. </html>

loginBean
Código Java:
Ver original
  1. public void login(ActionEvent actionEvent) {   
  2.         RequestContext context = RequestContext.getCurrentInstance();
  3.         LoginDao loginDao = new LoginDaoImpl();
  4.         boolean loggedIn = false;
  5.         String ruta = "";
  6.         FacesMessage msg = null;
  7.         try {
  8.             this.usuario = loginDao.logear(this.usuario);
  9.             if(usuario != null){
  10.                 loggedIn = true;
  11.                 FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuUsuario", this.usuario.getUsuUsuario());
  12.                 msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido al sistema", this.usuario.getUsuNombre());
  13.                 ruta = MyUtil.basePathLogin() + "views/inicio.xhtml";
  14.             }
  15.             else{
  16.                 loggedIn = false;
  17.                 msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Error de Logeo", "Usuario y/o Contraseña Incorrectos");
  18.             }
  19.         } catch (Exception e) {
  20.             e.printStackTrace();
  21.         }      
  22.         FacesContext.getCurrentInstance().addMessage(null, msg);
  23.         context.addCallbackParam("loggedIn", loggedIn);
  24.         context.addCallbackParam("ruta", ruta);
  25.  
  26.     }
  27.    
  28.     public boolean verificarSesion(){
  29.         boolean estado;
  30.         if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuUsuario") == null){
  31.             estado = false;
  32.         }
  33.         else{
  34.             estado = true;
  35.         }
  36.         return estado;
  37.     }

loginDaoImpl
Código Java:
Ver original
  1. public Usuario logear(Usuario usuario) {
  2.         Session session = HibernateUtil.getSessionFactory().openSession();
  3.         Usuario us = null;
  4.         try {
  5.             session.getTransaction().begin();
  6.             String hql = "from Usuario where usuUsuario = '"
  7.                     + usuario.getUsuUsuario() + "' and usuPassword = '"
  8.                     + Encript_MD5.getStringMessageDigest(usuario.getUsuPassword(), Encript_MD5.MD5) + "'";
  9.             Query query = session.createQuery(hql);
  10.             if (!query.list().isEmpty()) {
  11.                 us = (Usuario) query.list().get(0);
  12.             }
  13.             session.getTransaction().commit();
  14.         } catch (Exception e) {
  15.             System.out.println("No se puede logear " + e.getMessage());
  16.             session.getTransaction().rollback();
  17.         }
  18.         return us;
  19.     }

Hasta aqui me redirecciona a mi pagina principal la cual contiene un template con su respectivo menu, pero al intentar acceder a otra pagina me regresa al login.

Esto coloco en cada pagina xhtml
<h:outputLabel value="USTED NO HA INICIADO SESIÓN" rendered="#{loginBean.verificarSesion() eq false}" />
<h:form rendered="#{loginBean.verificarSesion()}">
</h:form>