Opniões sobre Filtros

E ae pessoal blz!

Eu estudei filtros com alguns tutoriais e a ajuda aqui do pessoal do fórum e desenvolvi um programinha com filtros implementando DAO, eu gostaria que vcs dessem opinião e onde eu poderia melhorar ou se esta legal.

O código é esse:

página index:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page</h1>
    <br>
    ${mensagem}<br>
    <form method="POST" action="home.do">
        usuário:<input type="text" name="usuario"><br>
        senha:<input type="password" name="senha"><br>
        <input type="submit" value="acessar">
    </form>
    
    </body>
</html>

A class Filter:

/*
 * FiltroLogin.java
 *
 * Created on 3 de Dezembro de 2007, 22:05
 */

package Filtro;

 import java.io.*;  
 import javax.servlet.*;  
 import Filtro.Login;
   
 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;  

/**
 *
 * @author alexandre
 * @version
 */
public class FiltroLogin implements Filter 
{
    
     public void init(FilterConfig config) throws ServletException 
     {  
           
     }  

     private FilterConfig filterConfig = null;  
     
     protected void processRequest(HttpServletRequest request, HttpServletResponse response,FilterChain chain)
    throws ServletException, IOException 
     {
        HttpServletRequest req = (HttpServletRequest)request;  
       Login login = (Login)req.getSession().getAttribute("login");  
       if (login != null) 
       {  
             chain.doFilter(request, response);  
       }
       else 
       {  
             HttpServletResponse res = (HttpServletResponse)response;  
             res.sendRedirect(req.getContextPath() + "/index.jsp");  
       }    
     }
     
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    }

    public void destroy() {
    }

    private void processRequest(HttpServletRequest request, HttpServletResponse response) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

Uma interface que faz as verificações:

/*
 * VerificaLogin.java
 *
 * Created on 3 de Dezembro de 2007, 22:07
 */

package Interface;

import java.io.*;
import java.net.*;
import java.sql.SQLException;

import javax.servlet.*;
import javax.servlet.http.*;

import DAO.DAOLogin;
import Filtro.Login;

/**
 *
 * @author alexandre
 * @version
 */
public class VerificaLogin extends HttpServlet 
{
    
    private String usuario;
    private String senha;
    private int erro = 0;
    private String mensagem = "";
    private String destino = "";
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException 
    {
        
        usuario = request.getParameter("usuario");
        senha = request.getParameter("senha");
        
        String contexto = request.getContextPath(); 
    
        if(usuario == null || usuario.equals(""))
        {
            mensagem = "Usuário inválido!";
            destino = "/index.jsp";
        }
        else if(senha == null || senha.equals(""))
        {
            mensagem = "Senha inválido!";
            destino = "/index.jsp";
        }
        else
        {
            
            Login login = new Login(usuario,senha);
            
            
            if(login != null)
            {
                    
                        DAOLogin resultado = new DAOLogin();
                        resultado.setDados(usuario,senha);
                        erro = resultado.getErro();
                        if(erro == 0)
                        {
                             HttpSession session = request.getSession();  
                             session.setAttribute("resultado", resultado);  
                             mensagem = "Usuario autenticado!";  
                             destino = "/restrito/Home.jsp";  
                             
                             System.out.println("entrou aqui");
                        }
                        else
                        {
                             mensagem = "Usuario ou senha invalido!!!";  
                             destino = "/index.jsp"; 
                             System.out.println("erro aqui");
                        }
                        
                   
              request.setAttribute("resultado",resultado);   
            }
            
            request.setAttribute("mensagem",mensagem);
            RequestDispatcher enviar = request.getRequestDispatcher(destino);
            enviar.forward(request,response);
           
        }
        
        
        
    }
    

}

Uma class para sets e gstd da verificação:

/*
 * Login.java
 *
 * Created on 3 de Dezembro de 2007, 22:03
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Filtro;

import java.io.Serializable;
/**
 *
 * @author alexandre
 */
public class Login implements Serializable 
{
    private String usuario;
    private String senha;
    /** Creates a new instance of Login */
    public Login() 
    {
    
    }
    
     public Login(String usuario, String senha) 
     {  
         setUsuario(usuario);  
         setSenha(senha);  
     }  
       
     public String getUsuario() 
     {  
         return usuario;  
     }  
       
     public void setUsuario(String usuario) 
     {  
         this.usuario = usuario;  
     }  
       
     public String getSenha() 
     {  
         return senha;  
     }  
       
     public void setSenha(String senha) 
     {  
         this.senha = senha;  
     }  
    
}

A minha DAO que faz a consulta no banco:

/*
 * DAOLogin.java
 *
 * Created on 4 de Dezembro de 2007, 21:04
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package DAO;

import java.io.*;
import java.net.*;
import java.util.*;

import java.sql.*;

import Conexao.Conexao;

/**
 *
 * @author alexandre
 */
public class DAOLogin 
{
    
    private String usuario;
    private String senha;
    private String nome;
    private int erro = 1;
    
    private ResultSet rs;
    private Connection conn;
    private Statement sql;
    
    /** Creates a new instance of DAOLogin */
    public DAOLogin() throws SQLException, IOException
    {
        conn = Conexao.connect();
    }
    
    public void setDados(String usuario, String senha) throws SQLException, IOException
    {
        this.usuario = usuario;
        this.senha = senha;
        
        PreparedStatement sql = conn.prepareStatement("select * from senhadeals where usuario=? and senha=?");
        sql.setString(1,usuario);
        sql.setString(2,senha);
        
        rs = sql.executeQuery();
        
        while(rs.next())
        {
            nome = rs.getString("nome");
            erro = 0;
        }
        
        
    }
    
    public String getNome()
    {
        return nome;
    }
    
    public int getErro()
    {
        return erro;
    }
}

A minha class de conexão

/*
 * Conexao.java
 *
 * Created on 3 de Dezembro de 2007, 21:57
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Conexao;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Connection;
/**
 *
 * @author alexandre
 */
public class Conexao 
{

    private static String NAME	= "com.mysql.jdbc.Driver";
    private static String URL	= "jdbc:mysql://localhost/banco";
    private static String LOGIN	= "root";
    private static String PASS	= "";
    private static Connection conn;
    /** Creates a new instance of Conexao */
    public static Connection connect() throws SQLException, IOException 
    {
 		
 		
 	try 
        {
            Class.forName(NAME);
            conn = DriverManager.getConnection(URL, LOGIN, PASS);
 	} 
        catch (ClassNotFoundException e) 
        {
        	System.out.print("\nNão foi possível estabelecer conexão com a base de dados.\n");
 		e.printStackTrace();
 		return null;
 	}
 		return conn;
    }
    
}

O meu XML:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>FiltroLogin</filter-name>
        <filter-class>Filtro.FiltroLogin</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>FiltroLogin</filter-name>
        <url-pattern>/restrito/*</url-pattern>
    </filter-mapping>
    
    <servlet>
        <servlet-name>VerificaLogin</servlet-name>
        <servlet-class>Interface.VerificaLogin</servlet-class>
    </servlet>
    
    <servlet-mapping>
       <servlet-name>VerificaLogin</servlet-name>
       <url-pattern>/home.do</url-pattern>
    </servlet-mapping>
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    
    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>

E ae home básica para teste:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%--
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library... action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
--%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page</h1><br>
    
    Usuário: ${resultado.nome}
    
   
    </body>
</html>

Ele esta fazendo a consulta e pelos testes que fiz o filtro esta funcionando ok.
Então o que vcs acham?

Alexandre,

o uso de filtros permite principalmente flexibilidade na implementação de novas features
sem a necessidade de alterar componentes da aplicação, e podendo ser encadeados.

Entretanto, o processo de autenticação deve ficar fora da aplicação Java EE,
devendo-se utilizar os mecanismos do JAAS e do JAAC, extendendo o comportamento
das API do AppServer que você utiliza, podendo implementar SSO, e o conceito de portais.

Sugiro você dar uma olhadinha nessas specs.

Bom estudo.

At,

ok !

Bom a sua implementação está funcionando blz mas existe outras opções prontas, dá uma olhada nessa.

http://www.acegisecurity.org

E ae pessoal blz!

Então ozielneto você poderia me explicar melhor sobre esses tópicos que vc me falou?
E onde posso achar tutoriais para estudar essa opções?

Valeu peça força a todos.

E ae pessoal blz

Então alguém poderia me explicar melhor o que é esses temas que o Oziel falou:

Pelo o que entendi esse exemplo que fiz funciona porém ainda não é o jeito certo de se fazer! É isso?

Valeu