Filter + JSF

2 respostas
kleins

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)

/*
 * 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 {

 }
}

2 Respostas

Ygor

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");

kleins

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!!!

Criado 16 de agosto de 2010
Ultima resposta 17 de ago. de 2010
Respostas 2
Participantes 2