Bom dia meus caros, estou com um problema estranho.
Desenvolvo uma aplicação JSF 2.0, Apache MyFaces, PrimeFaces 3.0…
Meu problema acontece quando abro uma sessão dentro de um MBean(LoginBean) @SessionScoped :
Forma 1: ( Recuperando do objeto request do External Context)
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = request.getSession(true);
Forma 2: ( Recuperando direto do ExternalContext)
// Session Fixation Prevention
HttpSession session = (HttpSession) externalContext.getSession(false);
if (log.isDebugEnabled()) {
log.debug("Session before authentication request: " + session.getId());
}
session.invalidate();
session = (HttpSession) externalContext.getSession(true);
if (log.isDebugEnabled()) {
log.debug("Session after authentication request: " + session.getId());
}
Caso o login falhe, envio a mensagem assim:
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Este usuário ja se encontra logado.", null);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
Porém a mensagem não é mostrada quando uso a ‘forma 2’ e o nome de usuário que é uma propriedade da classe LoginBean que
aparece na home, ‘Usuário Logado: xxxxxxx’ também deixa de aparecer.
Alguém consegue me dizer a diferença de se criar sessão de usuário pela ‘forma 1’ e ‘forma 2’ e porque na ‘forma 2’ acontece o problema descrito?
Como resolvê-lo?
Abraço e obrigado pela atenção!