Filter + JSF

Boa tarde Galera,

Seguinte,
Estou fazendo um filter, onde eu checo se o usuário está logado.
A questão, é que os dados do usuário estão em um ManagedBean de Session, e definitivamente não estou conseguindo acessar o contexto JSF pela minha classe filter.

Alguém pode me dar uma dica de como fazer isso?

A variavel auth sempre vem false, e ja tentei de diversas formas que encontrei aqui no forum.

Valeuuuuu 8)

[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package com.innova.filter;
import com.innova.MB.Login;
import java.io.IOException;
import java.util.Enumeration;
import javax.faces.context.FacesContext;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest rq = (HttpServletRequest) request;
HttpServletResponse rp = (HttpServletResponse) response;

    boolean auth = false;

     try {

          FacesContext context = FacesContext.getCurrentInstance();
          HttpSession session = (HttpSession) context.getExternalContext().getSession(false);

          auth = rq.getSession().getAttribute("Login") != null;

     } catch (Exception e) {
         System.out.println("Login NULOOOO");
     }

     System.out.println("Executando o filtro Auth! : "+auth);

     System.out.println(" URL : "+rq.getRequestURL().toString());

     //if (!auth && !rq.getRequestURL().toString().contains("expired")) {
     if(rq.getRequestURL().toString().contains("RE") && (!auth)){

         rp.sendRedirect(rq.getContextPath() + "/URexpired.jsp");

     } else {

                 try {
                     chain.doFilter(request, response);
                     } catch (Exception e) {
                 e.printStackTrace();
                    }
            }

}

public void destroy() {

}

public void init(FilterConfig config) throws ServletException {

}
}[/code]

Kleins

Creio que o erro esteja aqui

auth = rq.getSession().getAttribute("Login") != null; 

O que tu está salvando como atributo “Login”?

O que vc poderia fazer era salvar o objeto Usuario na sessão

Salvando:

Usuario usu = new Usuario(login,senha); FacesContext facesContext = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) facesContext.getCurrentInstance().getExternalContext().getRequest(); HttpSession session = request.getSession(); session.setAttribute("usuario", usu);
Recuperando:

HttpSession session = rq.getSession(false); Usuario usuario = (Usuario) session.getAttribute("usuario");

Olá Ygor.

O Login é um ManagedBean que eu salvo na sessão.

Dessa forma que você fez, funcionou, mas acredito que seria melhor pegar o MB que já está na sessão sem criar outro objeto… certo?

Um abs e Valeu!!!