JSF + CDI + FIlterLogin

2 respostas
MaiqueL

Pessoal eu to por fora do JSF 2.0

Queria saber como que eu implemento um filtro que redirecione quando eu nao estiver logado.

Eu fiz isso

Filter

/**
 * Servlet Filter implementation class LoginFilter
 */
public class LoginFilter implements Filter {
@Inject
UsuarioBackBean usuarioBean;
    /**
     * Default constructor. 
     */
    public LoginFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, 
	            ServletResponse response,
	            FilterChain chain) throws IOException, ServletException {
	   
	                     //Captura o ManagedBean chamado usuarioMB
//	                     UsuarioBackBean usuario = (UsuarioBackBean) 
//	                    		  ((HttpServletRequest) request)
//	                       .getSession().getAttribute("usuarioBean");

		
	                   
	                     //Verifica se nosso ManagedBean ainda não 
	                     //foi instanciado ou caso a
	                     //variável loggedIn seja false, assim saberemos que  
	                     // o usuário não está logado
	                     if (usuarioBean == null|| ! usuarioBean.isLoggedIn() ) {
	                       String contextPath = ((HttpServletRequest) request)
	                        .getContextPath();
	                         //Redirecionamos o usuário imediatamente 
	                         //para a página de login.xhtml
	                       ((HttpServletResponse) response).sendRedirect
	                        (contextPath +"/index.xhtml");
	                       
	                       
	                       
	                     } else {
	                            //Caso ele esteja logado, apenas deixamos 
	                            //que o fluxo continue
	                          chain.doFilter(request, response);
	                     }
	           }

@named

@Stateless
@SessionScoped
@Named("usuarioBean")

public class UsuarioBackBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@EJB
	UsuarioControllerRemote usuarioJPAcontroller;

	private Usuario usuario;
	
	@ManagedProperty(value="#{navigationBean}")
    private NavigationBean navigationBean;

	private Boolean log;

	
	private String email;
	private String password;


	

	public String doTest() {
		usuario = new Usuario();
		usuario.setNome(email);
		usuario.setPassword(password);
		Usuario u = usuarioJPAcontroller.findByLoginAndSenha(usuario);
		
		
	
	   
	 
	    
		if (u != null) {
		log=true;
			return "/portal/index.jsf";
			
		} else {
			log=false;
			return null;
		}
	}
	
	public String doAgenda() {
		log=true;
		return "/manterAgenda.jsf";
	}

	public Boolean isLoggedIn() {
		return log;
	}
	public Usuario getUsuario() {
		return (Usuario) usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	
}

agora quando eu clico dentro de um link que esta na pasta restrita ele redireciona

para pagina inicial mesmo eu estando logado o link seria doAgenda()

2 Respostas

MaiqueL

resolvido…

Mike

Não sei como você resolveu, mas um jeito bem fácil e prático é usar PhaseListeners.
Seria interessante você postar a sua solução, talvez ajude alguns leitores

Criado 18 de março de 2018
Ultima resposta 18 de mar. de 2018
Respostas 2
Participantes 2