[Resolvido] Dúvida com implementação de filter

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

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?

Jovem,

Coloque um redirect no seu else. Outra coisa estude um pouco mais sobre forward e reidirect.

Abs,

[quote=Kanin Dragon]Jovem,

Coloque um redirect no seu else. Outra coisa estude um pouco mais sobre forward e reidirect.

Abs,[/quote]

Resolvido o problema, antes de sua ajuda. Mas valeu, como sempre.

Peace’n out.

desculpa eu sei q o erro eh antigo mais … estou com o mesmo problema como vc resolveu?