Filter + Jsf + RichFaces + javax.servlet.Filter

2 respostas
G

Deu certo. Todas as paginas estao sendo direcionada para a "login.jsp" ... Gostaria de saber como faço pra liberar algumas paginas ... tipo : Contato.jsp , index.jsp, cadCliente.jsp.

Gostaria de saber tb a respeito de proteção. Se essa forma eh a forma mais segura. Utilizo o Hibernate com Criteria.

web.xml
<?xml version="1.0" encoding="ASCII"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<context-param>
		<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>resources.application</param-value>
	</context-param>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>
	<filter>
		<display-name>RichFaces Filter</display-name>
		<filter-name>richfaces</filter-name>
		<filter-class>org.ajax4jsf.Filter</filter-class>
		<init-param>
			<param-name>createTempFiles</param-name>
			<param-value>false</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>richfaces</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
	<context-param>
		<param-name>org.richfases.SKIN</param-name>
		<param-value>blueSky</param-value>
	</context-param>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>


	<session-config>
		<session-timeout>3</session-timeout>
	</session-config>

	<!-- FILTER -->
	<filter>
		<filter-name>Logar</filter-name>
		<filter-class>br.com.Projeto.Util.Seguranca</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Logar</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping>

	<!-- FILTER -->

</web-app>
classe Seguranca
package br.com.Projeto.Util;

import java.io.IOException;
import java.util.logging.LogRecord;

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;

import br.com.Projeto.Model.Usuario;



/**
 * Servlet Filter implementation class Seguranca
 */
public class Seguranca implements Filter {

	/**
	 * Default constructor.
	 */
	public Seguranca() {
		// TODO Auto-generated constructor stub
	}

	private static final String SIGNON_PAGE_URI = "Acesso/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() {
	}

	// Metodo que verifica o bean em sessao se esta logado.

	private boolean authorize(HttpServletRequest req) {
		boolean retorno = false;
		HttpSession session = req.getSession(false);
		if (session != null) {
			Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
			if ((usuario != null) && (usuario.isLogado() == true)) {
				retorno = true;
			}
		}
		return retorno;
	}

	public boolean isLoggable(LogRecord record) {
		throw new UnsupportedOperationException("Not supported yet.");
	}
}
classe login.jsp
package br.com.Projeto.Util;

import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.com.Projeto.DAO.DAO;
import br.com.Projeto.Model.Usuario;

public class Login {

	private String nome; // get/set
	private String senha; // get/set
	private List<Usuario> listaUsuarios;
	private Usuario usuarioLogado = null;
	private DAO<Usuario> daoUsuario = new DAO<Usuario>(Usuario.class);

	public String checkLogin() throws Exception {

		FacesContext fc = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fc.getExternalContext().getSession(
				false);
		if (nome != null && senha != null) {

			listaUsuarios = daoUsuario.buscaGenerica("nome", nome, "senha",
					senha);
			if (listaUsuarios.size() == 1)
				System.out.println("Usuario Logado.");
				usuarioLogado = listaUsuarios.get(0);
				usuarioLogado.setLogado(true);
				session.setAttribute("usuarioLogado", usuarioLogado);
			return "successo";
		} else {
			usuarioLogado.setLogado(false);
			return "erro";
		}
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	

}
classe DAO
public class DAO<T> {

	private static Logger logger = Logger.getLogger(DAO.class);

	private Class<T> persistentClass;

	private Session session = HibernateUtil.getSession();

	public DAO(Class<T> persistentClass) {

		this.persistentClass = persistentClass;
		

	}
  	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna,String nome, String coluna2 ,String nome2) {
		
		session.beginTransaction().begin();
	
		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.ilike(coluna, nome, MatchMode.ANYWHERE));
		c.add(Restrictions.ilike(coluna2, nome2, MatchMode.ANYWHERE));
		c.add(Restrictions.eq("status",true));

		session.beginTransaction().commit();
		return c.list();
	}
	
}

Obrigado. Agradeço a ajuda e Feliz ano novo :D

2 Respostas

G

alguem pode ajudar?

FernandoFranzini

tem varias abordagens…vou falar a mais simples:

  1. Cria uma pasta no seu contexto chamada “sistema” ou “privada” no qual vc coloca todos os recursos publicos da sua solução OU seja, todas a paginas que o usuario precisa estar logado. Faça a regra de filtro autenticado em cima dessa pasta “/sistema/*”
  2. Crie uma pasta chamada “publica” e coloque tudo que não precisar passar pela regra de autenticação do filtro - imagens, js, CSS e inclusive as paginas publicas.

Sim…filtro é uma boa sim.
Para outras opções veja - http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/

Criado 30 de dezembro de 2011
Ultima resposta 2 de jan. de 2012
Respostas 2
Participantes 2