Opniões sobre Filtros

6 respostas
A

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?

6 Respostas

D

não entendo nada de filtro, mas passando o olho vi… esse cast é desnecessário…

HttpServletRequest req = (HttpServletRequest)request;
S

também não entendo de filtros, mas no seu código eu mudaria só 2 coisas.
Quando você faz o select * from senhadeals where usuario=? and senha=? a performance é melhor se você colocar os campos ao invés de *.
E no mesmo método setDados eu colocaria um try catch.

A

E ae blz

Valeu pela opinião de vcs, vou analisar cada uma delas e verificar a melhor forma. Obrigado mesmo.
Porém ninguém falou ainda sobre filtros! Alguém poderia me dar uma opnião sobre o modo que criei os filtros?

Valeu a todos

L

Seu método doFilter do filtro não faz nada? :stuck_out_tongue:
Este é o método que teoricamente seria chamado ao filtrar, então eu pergunto, ele esta funcionado? esta impedindo que vc exiba paginas de “restrito/*” caso não esteja logado?

A

E ae blz

Sim ele esta funcionando se eu tentar logar direto ele manda direto para a página de index informado usuário e senha inválido.
Pórém eu queria saber se a lógica ficou bou ou se tem forma melhor de se fazer ou se essa já é o suficiente.

Valeu

L

Pow cara, não vou falar da sua solução porque ela não esta funcionando…

  1. Seu servlet não implementa doPost, doGet, ou service, ele tem apenas um método protegido “processRequest” que não existe em HttpServlet (classe pai), logo nunca vai ser chamado (login não funciona).
  2. O método chamado no filtro é doFilter, esse método não tem implementação nenhuma, se eu chamar direto a pagina “Home.jsp” no endereço do browser, vai me retornar uma pagina branca, sem nada, pois o método não foi implementado.
  3. achei meio feio o seu atributo “erro” no DAO, se o usuário é inválido, lança exceção, não seta flag’s.

ps: criei um projeto com os mesmos códigos que vc postou

flw

Criado 10 de dezembro de 2007
Ultima resposta 17 de dez. de 2007
Respostas 6
Participantes 4