Estou estudando Faces e criei um aplicativo de Login (basico soh para fins didaticos). O objetivo é: o usuario inicia a aplicação, esta verifica se existe algum usuario na seção, se sim entra no menu senão desvia para a pagina de login. Está tudo normal, consigo logar, vai para o menu. Navego em outros sites normalmente, volto pro link e caio direto no menu. Se faço logout tento entrar no site e recebo o login novamente. Até aí SHOW. Só que se eu faço o login e fecho o browser… quando eu entro novamente no link a tela de login me aparece novamente como se não existisse usuario na sessão! OBS: estou usando Filtro. Gostaria de uma ajuda de vocês para tentar resolver esse problema. Seguem os códigos:
Bean que representa o usuario:
package bean;
import java.io.IOException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
public class UsuarioBean {
private String usuario;
private String senha;
public static final String KEY = "usuario";
public UsuarioBean() {
}
public UsuarioBean(String usuario, String senha) {
setUsuario(usuario);
setSenha(senha);
}
public String adicionarUsuarioSessao() {
ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
ectx.getSessionMap().put(UsuarioBean.KEY, this);
return("sucesso");
}
// omitidos os sets e gets
public String retirarUsuarioSessao() {
ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
ectx.getSessionMap().put(UsuarioBean.KEY, null);
return("sucesso");
}
}
O GerenciadorLogin que implementa Filter:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
boolean autorizado = verificarPermissao((HttpServletRequest)request);
if( (!autorizado) && (req.getRequestURI().indexOf("login.faces")<0) ){
((HttpServletResponse)response).sendRedirect("login.faces");
} else {
chain.doFilter(request, response);
}
}
private boolean verificarPermissao(HttpServletRequest request) {
// procuramos por uma sessão aberta e se ela não existir pedimos para que seja criada
HttpSession sessao = request.getSession();
UsuarioBean usuarioBean = (UsuarioBean) sessao.getAttribute(UsuarioBean.KEY);
if(usuarioBean != null) {
return(true);
} else {
return false;
}
}
web.xml - Filtro
<filter>
<filter-name>GerenciadorLogin</filter-name>
<filter-class>filtros.GerenciadorLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>GerenciadorLogin</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
faces-config.xml
<managed-bean>
<managed-bean-name>usuarioBean</managed-bean-name>
<managed-bean-class>bean.UsuarioBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/menu.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/menu.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>