Você está na página 1de 18

Programao Avanada para Internet

JSP: filtros

Fernando Kenji Kamei

fkenjikamei@gmail.com
O que j aprendemos

Como trabalhar com JSP e Servlets

Programao Avanada para Internet | Prof. Fernando 2 de 18


Kenji Kamei
O que veremos hoje

O que so filtros
Como filtrar requisies e respostas

Programao Avanada para Internet | Prof. Fernando 3 de 18


Kenji Kamei
Problemtica...

Programao Avanada para Internet | Prof. Fernando 4 de 18


Kenji Kamei
Problemtica...

O que temos na imagem?

Vrios requisitos no-funcionais acoplados


aos cdigos de lgica de negcio.

Programao Avanada para Internet | Prof. Fernando 5 de 18


Kenji Kamei
Filtros

A API de Servlet possui um mecanismo


para isolar o comportamento dos requisitos
no-funcionais das regras de negcio, os
Filtros.

Programao Avanada para Internet | Prof. Fernando 6 de 18


Kenji Kamei
Filtros
O que so filtros?

Filtros so classes que permitem


executarmos cdigos antes da requisio,
e/ou depois envio da resposta.

Programao Avanada para Internet | Prof. Fernando 7 de 18


Kenji Kamei
Filtros
Filtrando requisies

Podemos filtrar todas as requisies dos


usurio, e de acordo com uma
determinada regra:
Direcionamos para a pgina A ao invs de B
Deixaremos acessar uma pgina Z, ou
negaremos

Programao Avanada para Internet | Prof. Fernando 8 de 18


Kenji Kamei
Filtrando requisies
Quando usar?

Quando temos tarefas que queremos


executar em mais de uma servlet, como
por exemplo registrar quais URIs esto
sendo acessadas (auditoria);

Ou ento um processo de autorizao que


verifica se o usurio atual pode acessar um
recurso.

Programao Avanada para Internet | Prof. Fernando 9 de 18


Kenji Kamei
Filtrando requisies
Como funciona?

Servlet
1
Servlet
Requisio 1 2

Requisio 2 FILTRO Servlet


3
Requisio 3 Servlet
4
Servlet
5

Auditori Tratamento de errosAutorizaes


a
Programao Avanada para Internet | Prof. Fernando 10 de 18
Kenji Kamei
Filtrando requisies
Como funciona?

Programao Avanada para Internet | Prof. Fernando 11 de 18


Kenji Kamei
Filtrando requisies
Implementao

Para criarmos um Filtro utilizando a API de


Servlets do Java EE 6, podemos utilizar
anotaes.
@ W eb Filter("/FiltroD eA u d itoria")

Programao Avanada para Internet | Prof. Fernando 12 de 18


Kenji Kamei
Filtrando requisies
Implementao
@ W eb Filter(u rlPattern s= /*")
p u b lic class FiltroD eA u d itoria im p lem en ts Filter {

p u b lic FiltroD eA u d itoria() { }

p u b lic void in it(FilterC on f i


g fC on f i
g ) th row s
S ervletExcep tion { }

p u b lic void d estroy() { }

p u b lic void d oFilter(S ervletR eq u est req u est,


S ervletR esp on se resp on se, FilterC h ain ch ain ) th row s
IO Excep tion , S ervletExcep tion {
chain.doFilter(request, response);
}
}

Programao Avanada para Internet | Prof. Fernando 13 de 18


Kenji Kamei
Filtrando requisies
Implementao

init(): quando inicializado

destroy(): quando a servlet finalizada

doFilter():
request: para qualquer servlet, mas podemos
fazer um casting para HttpServletRequest
response: fazer a casting tb
filtros: cadeia de filtros (request deve prosseguir)

Programao Avanada para Internet | Prof. Fernando 14 de 18


Kenji Kamei
Filtrando requisies
Tipos de filtros

@WebFilter("/ifal")
Todas as requisies a partir de /ifal sero
filtradas.

@WebFilter("/*.jsp")
Todas as requisies para pginas JSPs.

@WebFilter("/*")
Qualquer coisa, ou seja, todo mundo vai
passar por essa servlet
Programao Avanada para Internet | Prof. Fernando 15 de 18
Kenji Kamei
Filtrando requisies
Tipos de filtros

Podemos definir quais as servlets que


passaro por um determinado filtro.

@ W eb Filter(n am e = "A u d itoria", servletN am es =


{ "m eu S ervlet", "ou troS ervlet" } )
p u b lic class FiltroD eA u d itoria im p lem en ts Filter {
p u b lic void d oFilter(H ttp S ervletR eq u est req ,
H ttp S ervletR esp on se res, FilterC h ain ch ain ) {
// ...
}
}

Programao Avanada para Internet | Prof. Fernando 16 de 18


Kenji Kamei
Filtrando requisies
Algum problema?

Da maneira como est, o filtro est


aplicado a todos os servlets. Mas, no est
aparecendo nada, porque colocamos um
Filtro, e no dissemos o que deveria ser
feito.

Se quiser continuar o servlet, implemente


o FilterChain.
chain.doFilter(req, response);

Programao Avanada para Internet | Prof. Fernando 17 de 18


Kenji Kamei
Perguntas?

A habilidade de
programar s
adquirida
com a unio da
teoria com a
prtica
Programao Avanada para Internet | Prof. Fernando 18 de 18
Kenji Kamei