login filtro - jsp
6 pág.

login filtro - jsp


DisciplinaDesenvolvimento de Sistemas Web1.449 materiais7.106 seguidores
Pré-visualização2 páginas
Filtro em JSP 
O objetivo deste exercício é mostrar uma forma simples de fazer o controle, utilizando 
os filtros da API Servlet. 
Faremos uma aplicação simples com um formulário de login e uma pagina jsp 
protegida, a seguir. 
1. Banco de dados (MySQL) 
Criaremos primeiramente um banco de dados, com uma tabela usuário, onde serão 
cadastrados os usuários da nossa aplicação. Utilizaremos o banco de dados MySQL, 
execute o seguinte script no console do MySQL: 
CREATE DATABASE Livraria; 
USE livraria; 
CREATE TABLE usuario ( 
 id INT(11) NOT NULL auto_increment, 
 nome varchar(100) DEFAULT NULL, 
 login varchar(50) DEFAULT NULL, 
 senha varchar(50) DEFAULT NULL, 
 PRIMARY KEY (id) 
); 
INSERT INTO usuario (nome, login, senha) VALUES ('Administrador', 'admin', '1234'); 
INSERT INTO usuario (nome, login, senha) VALUES ('Jorge', 'professor', '2m12'); 
 
2. Estrutura básica da aplicação 
 
Criaremos também as pastas básicas da aplicação com a seguinte estrutura, dentro da 
pasta da aplicação WebFilterJSP, como mostrado na figura acima. 
 
3. O Usuário 
Um usuário do banco de dados será representado por um objeto da classe Usuario, crie o 
objeto no pacote br.ufrj.cos.zavaleta.model: 
package br.ufrj.cos.zavaleta.model; 
import java.io.Serializable; 
public class Usuario implements Serializable{ 
 private int id; 
 private String nome; 
 private String login; 
 private String senha; 
 public int getId() { 
 return id; 
 } 
 public void setId(int id) { 
 this.id = id; 
 } 
 public String getLogin() { 
 return login; 
 } 
 public void setLogin(String login) { 
 this.login = login; 
 } 
 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; 
 } 
 } 
 
4. JSP 
Dentro da pasta admin criaremos uma pagina JSP chamada de logado.jsp, que será 
protegida por senha, o código dela é mostrado abaixo: 
<%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=ISO-8859-1&quot; 
 pageEncoding=&quot;ISO-8859-1&quot;%> 
<!DOCTYPE HTML PUBLIC &quot;-// W3C/ /DTD HTML 4.01 Transitional/ /EN&quot;> 
<html> 
<head> 
<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;> 
<tit le>Logado</ title> 
</head> 
<body> 
<h3>Olá <%=((br.ufrj.cos.zavaleta.model.Usuarios)session.getAttribute(&quot;usuario&quot;)).getNome() %>, você 
está logado no sistema!</h3> 
</body> 
</html> 
 
 Dentro da pasta WebFilterJSP/Paginas_Web criaremos um arquivo index.jsp que será 
o formulário de login, o código é o seguinte: 
<%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=ISO-8859-1&quot; 
 pageEncoding=&quot;ISO-8859-1&quot;%> 
<!DOCTYPE HTML PUBLIC &quot;-// W3C/ /DTD HTML 4.01 Transitional/ /EN&quot;> 
<html> 
<head> 
<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;> 
<tit le>Login</ title> 
<style type=&quot;text/css&quot;> 
 *{ 
 font-family: Verdana, Arial; 
 } 
 table{ 
 background-color: #EEEEEE; 
 border: solid #CCCCCC 1px; 
 } 
 th{ 
 background-color: #CCCCCC; 
 color: #FFFFFF; 
 } 
 .campo{ 
 border: solid #CCCCCC 1px; 
 } 
</style> 
</head> 
<body> 
<form method=&quot;POST&quot; action=&quot;Logar&quot;> 
<table> 
<tr> 
 <th colspan=&quot;2&quot;>Login</th> 
 </ tr> 
 <tr> 
 <td>Login: </td> 
 <td><input class=&quot;campo&quot; type=&quot;text&quot; name=&quot;login&quot; /></ td> 
 </ tr> 
 <tr> 
 <td>Senha: </ td> 
 <td><input class=&quot;campo&quot; type=&quot;password&quot; name=&quot;senha&quot; /></ td> 
 </ tr><% String[] erros = {&quot;Usuario ou senha incorretos!&quot;, &quot;Você não está 
 logado!&quot;}; 
 String erro = request.getParameter(&quot;erro&quot;); 
 if(erro!=null){%> 
<tr> 
<td style=&quot;color: #FF0000&quot; colspan=&quot;2&quot;><%=erros[Integer.parseInt(erro)-1] 
 %></ td> 
</ tr> <% } %> 
<tr> 
<td colspan=&quot;2&quot; align=&quot;center&quot;><input type=&quot;submit&quot; value=&quot;Entrar&quot; /></td> 
 </ tr> 
</ table> 
</ form> 
</body> 
</html> 
 
 
 5. O Servlet 
Será necessário também criar um Servlet chamado de Logar.java que se conecte com o 
banco de dados e verifique os dados digitados, então criaremos um: 
package br.ufrj.cos.zavaleta.controller; 
 import java.io.IOException; 
import java.sql.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
public class Logar extends HttpServlet { 
 @Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
 throws ServletException, IOException { 
 Connection conn = null; 
 PreparedStatement st = null; 
 ResultSet rs = null; 
 try{ 
 String login = request.getParameter(&quot;login&quot;); 
 String senha = request.getParameter(&quot;senha&quot;); 
 Class.forName(&quot;com.mysql.jdbc.Driver&quot;); 
 conn = DriverManager.getConnection(&quot;jdbc:mysql://localhost:3306/livraria&quot;, &quot;root&quot;, 
 &quot;root2m12&quot;); 
 st = conn.prepareStatement(&quot;SELECT * FROM usuario WHERE login=?&quot;); 
 st.setString(1, login); 
 rs = st.executeQuery(); 
 //define usuario 
 Usuario usuario = null; 
 if(rs.first()){ 
 usuario = new Usuario(); 
 usuario.setId(rs.getInt(&quot;id&quot;)); 
 usuario.setNome(rs.getString(&quot;nome&quot;)); 
 usuario.setLogin(rs.getString(&quot;login&quot;)); 
 usuario.setSenha(rs.getString(&quot;senha&quot;)); 
 } 
 if(usuario==null||!usuario.getSenha().equals(senha)){ 
 request.getSession().setAttribute(&quot;msg&quot;, &quot;Login ou senha incorretos!&quot;); 
 response.sendRedirect(&quot;index.jsp&quot;); 
 }else{ 
 request.getSession().setAttribute(&quot;usuario&quot;, usuario); 
 response.sendRedirect(&quot;admin/logado.jsp&quot;); 
 } 
 }catch(Exception e){ 
 throw new ServletException(e); 
 }finally{ 
 try{ 
 rs.close(); 
 st.close(); 
 conn.close(); 
 }catch(Exception e){ 
 e.printStackTrace(); 
 } 
 } } } 
6. Configuração 
Agora vamos configurar o arquivo web.xml (../WEB-INF/web.xml), declare o Servlet 
como abaixo: 
<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> 
<web-app id=&quot;WebApp_ID&quot; version=&quot;2.4&quot; xmlns=http:/ / java.sun.com/xml/ns/ j2ee 
xmlns:xsi=&quot;http:/ /www.w3.org/2001/XMLSchema-instance&quot; 
xsi:schemaLocation=&quot;http:/ / java.sun.com/xml/ns/ j2ee http:/ / java.sun.com/xml/ns/ j2ee/web-
app_2_4.xsd&quot;> 
 <display-name>WebFilterJSP</display-name> 
 <servlet> 
 <servlet-name>Logar</servlet-name> 
 <servlet-class>br.ufrj.cos.zavaleta.controller.Logar</servlet-class> 
 </servlet> 
 <servlet-mapping> 
 <servlet-name>Logar</servlet-name> 
 <url-pattern>/Logar</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> 
 
7. Teste 
A aplicação já deve funcionar agora, compile as classes e execute no browser, 
http://localhost:8084/WbFilterJSP/, será exibida a tela de login, ao digitar o login 
\u201cadmin\u201d e senha \u201c1234\u201d será exibida a tela de \u201clogado\u201d do sistema principal, mas 
verifique que mesmo sem logar a pagina jsp logado.jsp pode ser visualizada, isso 
porque ainda não definimos nenhuma restrição para isso. 
8. O filtro 
Os filtros da API servlet são responsáveis por interceptar a chamada a certo recurso, 
fazer algum processamento e liberá-la ou não. 
Usaremos um filtro para interceptar as chamadas para os Servlet\u2019s