Buscar

login filtro - jsp

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

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="java" contentType="text/html; charset=ISO-8859-1" 
 pageEncoding="ISO-8859-1"%> 
<!DOCTYPE HTML PUBLIC "-// W3C/ /DTD HTML 4.01 Transitional/ /EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<tit le>Logado</ title> 
</head> 
<body> 
<h3>Olá <%=((br.ufrj.cos.zavaleta.model.Usuarios)session.getAttribute("usuario")).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="java" contentType="text/html; charset=ISO-8859-1" 
 pageEncoding="ISO-8859-1"%> 
<!DOCTYPE HTML PUBLIC "-// W3C/ /DTD HTML 4.01 Transitional/ /EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<tit le>Login</ title> 
<style type="text/css"> 
 *{ 
 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="POST" action="Logar"> 
<table> 
<tr> 
 <th colspan="2">Login</th> 
 </ tr> 
 <tr> 
 <td>Login: </td> 
 <td><input class="campo" type="text" name="login" /></ td> 
 </ tr> 
 <tr> 
 <td>Senha: </ td> 
 <td><input class="campo" type="password" name="senha" /></ td> 
 </ tr><% String[] erros = {"Usuario ou senha incorretos!", "Você não está 
 logado!"}; 
 String erro = request.getParameter("erro"); 
 if(erro!=null){%> 
<tr> 
<td style="color: #FF0000" colspan="2"><%=erros[Integer.parseInt(erro)-1] 
 %></ td> 
</ tr> <% } %> 
<tr> 
<td colspan="2" align="center"><input type="submit" value="Entrar" /></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("login"); 
 String senha = request.getParameter("senha"); 
 Class.forName("com.mysql.jdbc.Driver"); 
 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/livraria", "root", 
 "root2m12"); 
 st = conn.prepareStatement("SELECT * FROM usuario WHERE login=?"); 
 st.setString(1, login); 
 rs = st.executeQuery(); 
 //define usuario 
 Usuario usuario = null; 
 if(rs.first()){ 
 usuario = new Usuario(); 
 usuario.setId(rs.getInt("id")); 
 usuario.setNome(rs.getString("nome")); 
 usuario.setLogin(rs.getString("login")); 
 usuario.setSenha(rs.getString("senha")); 
 } 
 if(usuario==null||!usuario.getSenha().equals(senha)){ 
 request.getSession().setAttribute("msg", "Login ou senha incorretos!"); 
 response.sendRedirect("index.jsp"); 
 }else{ 
 request.getSession().setAttribute("usuario", usuario); 
 response.sendRedirect("admin/logado.jsp"); 
 } 
 }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="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" 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"> 
 <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 
“admin” e senha “1234” será exibida a tela de “logado” 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’se JSP’s de uma área 
restrita de nossa aplicação, a área será definida pelo prefixo /admin (a pasta admin 
criada acima), nesse caso seria uma área de administração, por exemplo, com conteúdo 
restrito. 
package br.ufrj.cos.zavaleta; 
import java.io.IOException; 
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; 
public class FiltroSeguranca implements Filter { 
 public void init(FilterConfig config) throws ServletException { 
 } 
 public void doFilter(ServletRequest req, ServletResponse res, 
 FilterChain chain) throws IOException, ServletException { 
 HttpSession session = ((HttpServletRequest)req).getSession(); 
 Usuario usuario = (Usuario)session.getAttribute("usuario"); 
 if(usuario==null){ 
 session.setAttribute("msg","Você não está logado no sistema!"); 
 ((HttpServletResponse)res).sendRedirect("../index.jsp"); 
 }else{ 
 chain.doFilter(req, res); 
 } 
 } 
 public void destroy() { 
 } 
} 
 
 Edite o arquivo web.xml e adicione as seguintes linhas abaixo de </welcome-file-list> 
 <filter> 
 <filter-name>Filtro Seguranca</filter-name> 
 <filter-class>br.ufrj.cos.zavaleta.controller.FiltroSeguranca</filter-class> 
 </filter> 
 <filter-mapping> 
 <filter-name>Filtro Seguranca</filter-name> 
 <url-pattern>/admin/*</url-pattern> 
 </filter-mapping> 
 
 9. Finalizando 
Acesse novamente o endereço http://localhost:8084/WenFilterJSP/admin/logado.jsp, 
dessa vez não será possível acessar a página sem antes logar. 
10. O processo 
Ao fazer uma requisição a /admin/logado.jsp o pattern bate com o configurado no filter-
mapping, assim é chamado primeiramente o filtro, no método doFilter() é verificada a 
existência do atribute “usuario” na sessão, caso exista é porque o usuário está logado, 
então o método doChain() libera a execução do Servlet, caso o atributo seja nulo, o 
usuário é redirecionado para a pagina de login, e o Servlet (JSP) sequer é executado. 
 
Jorge J Zavaleta 
zavaleta@cos.ufrj.br

Outros materiais