Filtros. O que são Filtros Um filtro é um componente Web que reside no servidor Intercepta as requisições e respostas no seu caminho até o servlet e de.

Slides:



Advertisements
Apresentações semelhantes
Aplicação de exemplo Struts Aplicação de exemplo
Advertisements

Desenvolvimento de aplicações Web com J2EE Servlets
Framework para desenvolvimento web
Objetos Implícitos Contextuais
JSP Segundo Semestre – 2008 Professor Glaucio Bianchini
Modelo Cliente-Servidor
Desenvolvimento Web em Java com Java Server Faces (JSF)
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Jakarta Struts 1.1 Ago/2006 Softplan/Poligraph Alessandro Lemser
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Model-View-Controller (MVC) em Aplicações Web Eduardo Martins Guerra Desenvolvimento de Soluções WEB.
Desenvolvimento de Soluções WEB Escopos de uma Aplicação Web
Tecnologias para Internet
Desenvolvimento de Projeto e Aplicações Web
Aplicativos Web Com Orientação a Objetos
Desenvolvimento WEB I Camila Nunes
JAVA - Struts
Grupo de Pesquisa em ENGENHARIA DE SOFTWARE
Programação Orientada a Objetos com Java
Capítulo 2 Java Servlets.
JAVA Orientação a Objetos
Servlets: Redirecionamento, Atributos e Sessões
Linguagem de Programação JAVA
Introdução a aplicativos Java
 Muitas aplicações se faz necessário o acompanhamento da navegação do usuário armazenando informações específicas de cada um.  É comum hoje em dia acessarmos.
Java Avançado Java Servlets Material cedido por: Daniel Arraes Pereira
Struts Java avançado – PCC Jobson Ronan
Gente Autor: Sérgio Soares Servlets. zMódulos de programas em Java zRecebem pedidos, executam o serviço e geram respostas zResidem no servidor zAnálogo.
Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina
Jobson Ronan PEC – Filtros e Sessões Jobson Ronan
Conceitos de J2EE para a WEB
Aula 2 – Primeiros Passos com a arquitetura Web Servidor
Prof. Alexandre Monteiro Recife
Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação.
1 Servlet Prof. Alexandre Monteiro Recife. Contatos n Prof. Guilherme Alexandre Monteiro Reinaldo n Apelido: Alexandre Cordel n /gtalk:
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
JSP / Servlets Avançado
The Factory Esclarecendo a arquitetura utilizada no projeto Piloto Autor: Wabber Filho.
JSP e Servlets ISEP – LP2 Filipe Costa – /2004.
Aplicativos Web Com Orientação a Objetos
Aula 2 – Primeiros Passos com a arquitetura Web Servidor Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas.
Arquitetura das JSP - Aula 2
Aplicações Web com Orientação a Objetos
PEC - Contextos Jobson Ronan Sobre a aula Serão apresentadas aplicações Web configuráveis através de um deployment descriptor Aplicações.
JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF Dezembro/2005.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Interface HttpServletResquest
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
PEC - JSP Jobson Ronan Objetivos Esta aula apresenta tudo o que é necessário para implementar servlets escrevendo JavaServer Pages.
Unidade 5 – Integrando JSP e Servlets Prof.: Henrique Santos
Daniel Garcez de Sousa 07/04/2015. Nesta apresentação abordaremos os conceitos básicos sobre o ciclo de vida de um Servlet e os HTTP servlets. No final.
OBJETIVO Nesta aula será apresentado o desenvolvimento básico sobre HTTP Servlets. Espera-se que, ao final da apresentação, o aluno tenha noções de como.
Programação Distribuída em Java Aula Na aula passada vimos: TomCat –Instalação e configuração –Criação de contexto JSP... uma introdução –Expressões.
Servlets Jobson Ronan Objetivos Aprender  Como escrever um servlet  Como compilar um servlet  Como implantar um servlet no servidor.
Java Server Pages Um estudo de caso para aprendizagem Renata França de Pontes.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aplicativos para Internet Prof. Wolley W. Silva
Desenvolvimento WEB II Aula 3 – Conexão com o Banco de Dados
UCSal – Tecnologia em Análise e Desenvolvimento de Sistemas Programação para Aplicações WEB Profa. Semíramis Assis
O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller.
Aplicativos para internet Prof. Wolley
Servlets Manoel Neto Objetivos Aprender  Como escrever um servlet  Como compilar um servlet  Como executar Também serão.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Java TM Platform, Enterprise Edition (Java EE) Projeto de Sistemas de Software.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Transcrição da apresentação:

Filtros

O que são Filtros Um filtro é um componente Web que reside no servidor Intercepta as requisições e respostas no seu caminho até o servlet e de volta ao cliente Sua existência é ignorada por ambos. É totalmente transparente tanto para o cliente quanto para o servlet Suportado desde a versão 2.3 da especificação de Servlets Filtros podem ser concatenados em uma corrente Neste cenário, as requisições são interceptadas em uma ordem e as respostas em ordem inversa

Filtros Um filtro pode realizar diversas transformações, tanto na resposta como na requisição antes de passar esses objetos adiante (se o fizer) Filtros podem ser reutilizados em vários servlets

Para que servem ? Filtros permitem: Tomada de decisões: podem decidir se repassam uma requisição adiante, se redirecionam ou se enviam uma resposta interrompendo o caminho normal da requisição Tratamento de requisições e respostas: podem empacotar uma requisição (ou resposta) em outra, alterando os dados e o conteúdo dos cabeçalhos Aplicações típicas Autenticação Conversão de caracteres, MIME types, tokenizing Conversão de imagens, compressão e decompressão Criptografia

Como funcionam? Quando o container recebe uma requisição, ele verifica se há um filtro associado ao recurso solicitado. Se houver, a requisição é roteada ao filtro O filtro, então, pode: 1. Gerar sua própria resposta para o cliente 2. Repassar a requisição, modificada ou não, ao próximo filtro da corrente, se houver, ou ao recurso final, se ele for o último filtro Rotear a requisição para outro recurso Na volta para o cliente, a resposta passa pelo mesmo conjunto de filtros em ordem inversa

API: Interfaces Filter, FilterConfig, FilterChain javax.servlet.Filter void init(FilterConfig), void doFilter(ServletRequest, ServletResponse, FilterChain) void destroy() javax.servlet.FilterConfig String getFilterName() String getInitParameter(String name) Enumeration getInitParameterNames() ServletContext getServletContext() javax.servlet.FilterChain void doFilter(ServletRequest, ServletResponse)

API: Classes empacotadoras Úteis para que filtros possam trocar uma requisição por outra Uma subclasse dessas classes empacotadoras pode ser passada em uma corrente de filtros no lugar da requisição ou resposta original Métodos como getParameter() e getHeader() podem ser sobrepostos para alterar parâmetros e cabeçalhos No pacote javax.servlet ServletRequestWrapper implements ServletRequest: implementa todos os métodos de ServletRequest e pode ser sobreposta para alterar o request em um filtro ServletResponseWrapper implements ServletResponse: implementa todos os métodos de ServletResponse No pacote javax.servlet.http HttpServletRequestWrapper e HttpServletResponseWrapper implementam todos os métodos das interfaces correspondentes,facilitando a sobreposição para alteração de cabeçalhos, etc.

Como escrever um filtro simples 1. Escreva uma classe implementando a interface Filter e todos os seus métodos init(FilterConfig) doFilter(ServletRequest, ServletResponse, FilterChain) destroy() 2. Configure o filtro no deployment descriptor (web.xml) usando os elementos e Podem ser mapeados a URLs, como servlets Podem ser mapeados a servlets, para interceptá-los A ordem dos mapeamentos é significativa

Filtro simples que substitui servlet public class HelloFilter implements Filter { private String texto; public void init(FilterConfig config) { texto = config.getInitParameter("texto"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println(" Filter Response"); out.println(" "); out.println(" Filter Response "); out.println(" " + texto); out.println(" "); out.close(); } public void destroy() {} }

Configuração Os elementos e são quase idênticos aos equivalentes para A diferença é que é usado também para associar filtros a servlets, na ordem em que aparecem Filtro simples, que substitui um servlet Filtro que intercepta um servlet

Filtros de verdade Filtros úteis podem ser encadeados em uma corrente. Para que isto seja possível, devem chamar doFilter() no objeto FilterChain - parâmetro no seu próprio doFilter() public void doFilter(...req,...res, FilterChain chain) {... chain.doFilter(req, res);... } Antes da chamada ao doFilter(), o filtro pode processar a requisição e alterar ou substituir os objetos ServletRequest e ServletResponse ao passá-los adiante ServletRequest newReq = new ModifiedRequest(...); chain.doFilter(newReq, res); Na volta, opera sobre a resposta e pode alterá-la Estende ServletRequestWrapper

Configuração de corrente A corrente pode ser configurada com definição das instâncias de filtros e mapeamentos em ordem filtroA filtros.FilterA filtroB filtros.FilterB filtroA /serv_um filtroA servlet2 filtroB servlet1

Filtros que toma decisões Um filtro pode ler a requisição e tomar decisões como transformá-la, passá-la adiante ou retorná-la public void doFilter(.. request,... response,... chain) { String param = request.getParameter("saudacao"); if (param == null) { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println(" Erro! "); } else if (param.equals("Bonjour!")) { class MyWrapper extends ServletRequestWrapper { //... public String getParameter(String name) { if (name.equals("saudacao")) { return "Bom Dia"; } ServletRequest myRequest = new MyWrapper(request); chain.doFilter(myRequest, response); } else { chain.doFilter(request, response); } } Classe interna (o construtor foi omitido da declaração por falta de espaço)

Wrappers Sobrepondo um HttpServletRequest public class MyServletWrapper extends HttpServletRequestWrapper{ public MyServletWrapper(HttpServletRequest req) { super(req); } public String getParameter(String name) { return super.getParameter(name).toUpperCase(); }

Wrappers Usando Wrappers em servlets HTTP HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; HttpServletRequest fakeReq = new MyServletWrapper(req); HttpServletResponse fakeRes = new TestResponse(res); chain.doFilter(fakeReq, fakeRes);

Observações importantes Para filtros usados com servlets HTTP, o request e response passados são HttpServletRequest e HttpServletResponse Wrappers devem estender as classes que implementam essas interfaces Filtros não são chamados quando o recurso que interceptam for chamado através de um RequestDispatcher O recurso é acessado diretamente sem filtragem Isto ocorre para evitar loops infinitos Filtros associados a páginas de erro também não são chamados

Exercícios 1. Escreva um filtro simples que leia a requisição e verifique se ela contém os parâmetros usuario e senha Se não tiver, repasse a requisição para a página erro.html Se tiver, abra o arquivo usuarios.txt usando a classe Properties. Ele possui uma lista de nome=senha, um por linha. Veja se o usuário coincide com a senha. Se sim, chame o próximo filtro. Se não, redirecione para acessoNegado.html Associe o filtro a um servlet qualquer (SimpleServlet, por exemplo) Acesse o servlet e verifique que ele passa pelo filtro

Exercícios 2. Escreva dois RequestWrappers que encapsulam HttpServletRequest e sobrepõem o método getParameter() Use o primeiro em um filtro chamado UpperCaseFilter, que coloque os valores de todos os parâmetros em caixa-alta. O segundo, ReverseFilter, deve inverter o texto dos parâmetros Coloque os dois em cascata apontando para um servlet simples.