Caros:
Tenho uma aplicação que possui uma página de login e diversas páginas internas, que somente estarão disponíveis após o login do usuário. Para verificar se o usuário está logado, criei um filtro para realizar a verificação.
Minha aplicação tem a seguinte estrutura:
- Páginas web
login.xhtml
loginUser.xhtml- privado
logadoUser.xhtml
- privado
No web.xml:
<filter>
<filter-name>verificaLogado</filter-name>
<filter-class>meupacote.filtro.FiltroLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>verificaLogado</filter-name>
<url-pattern>/privado/*</url-pattern>
</filter-mapping>
classe FiltroLogin:
public class FiltroLogin implements Filter {
private static final String SIGNON_PAGE_URI = "/login.jsf";
public void init( FilterConfig filterConfig ) throws ServletException {
}
public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException, ServletException{
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
if( !this.authorize( (HttpServletRequest) req ) ){
request.getRequestDispatcher(SIGNON_PAGE_URI ).forward( req, res );
} else {
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
chain.doFilter( req, res );
}
}
public void destroy() {
}
private boolean authorize( HttpServletRequest req ) {
boolean retorno = false;
HttpSession session = req.getSession(false);
if(session != null){
Usuario login = (Usuario) session.getAttribute("usuario");
if (login != null ) {
retorno = true;
}
}
return retorno;
}
}
Quando eu acesso minha página LOGIN pela primeira vez, eu tenho na barra de endereços do browser o seguinte:
http://localhost:8080/Portal/login.jsf
Na minha página possuo o link para uma página interna:
http://localhost:8080/Portal/loginUser.jsf
quando clico no link, sou levado para a página loginUser, e se eu fizer o login corretamente, tudo funciona, me levando para a página
http://localhost:8080/Portal/privado/logadoUser.jsf
Porém, se eu digitar diretamente no brower o endereço da página interna:
http://localhost:8080/Portal/privado/logadoUser.jsf
Meu filtro é executado, e como não estou logado na sessão, a página login.jsf novamente é carregada. Porém, o endereço na barra do browser não muda, e, o que é pior, o meu link inicial muda para
http://localhost:8080/Portal/privado/loginUser.jsf
Com o acréscimo da pasta /privado/ - resultado, não consigo mais navegar.
Porquê isso acontece? Como eu posso solucionar isso?