Filtragem de Servlets
A filtragem de servlet fornece um novo tipo de objeto chamado de filtro, que pode transformar um pedido ou modificar uma resposta.
É possível encadear filtros de modo que um grupo de filtros possa agir na entrada e na saída de um recurso ou grupo de recursos especificados.
Os filtros, em geral, incluem filtros de log, filtros de conversão de imagem, filtros de criptografia, filtros de tipo MIME (Multipurpose Internet Mail Extensions) (funcionalmente equivalentes ao encadeamento de servlets). Embora os filtros não sejam servlets, seu ciclo de vida é muito semelhante.
Os filtros são manipulados da seguinte maneira:
- O contêiner da Web determina se ele necessita construir uma FilterChain contendo o LoggingFilter
para o recurso solicitado.
A FilterChain começa com a chamada do LoggingFilter e termina com a chamada do recurso solicitado.
- Se outros arquivos precisar entrar na cadeia, o contêiner da web os colocará após theLoggingFilter e antes do recurso solicitado.
- Em seguida, o contêiner da Web instancia e inicializa o LoggingFilter (se isso não tiver sido feito anteriormente) e chama seu método doFilter(FilterConfig) para iniciar a cadeia.
- O LoggingFilter executa pré-processamento nos objetos do pedido e da resposta
e, em seguida, chama o método doFilter(ServletRequest, ServletResponse)
da cadeia de filtros.
Esse método transmite o processamento para o próximo recurso na cadeia, o recurso solicitado.
- Após o retorno do método doFilter(ServletRequest, ServletResponse) da cadeia de filtros, o LoggingFilter executa pós-processamento no objeto do pedido e resposta antes de enviar a resposta de volta ao cliente.
A Java™ Servlet Specification 2.4 permite definir um novo elemento <dispatcher> no descritor de implementação com possíveis valores como REQUEST, FORWARD, INCLUDE, ERROR, em vez de chamar filtros com RequestDispatcher.
A Java Servlet Specification 3.0 permite definir um novo elemento <dispatcher> no descritor de implementação com valores possíveis como ASYNC, REQUEST, FORWARD, INCLUDE, ERROR, em vez de chamar filtros com RequestDispatcher.
<filter-mapping>
<filter-name>Logging Filter</filter-name>
<url-pattern>/products/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Isso indica que o filtro deve ser aplicado a pedidos diretamente a partir do cliente, assim como pedidos encaminhados. A inclusão dos valores INCLUDE e ERROR também indica que o filtro deve ser aplicado adicionalmente para pedidos incluídos e pedidos <página-de-erro>. Se você não especificar nenhum elemento <dispatcher>, o padrão será REQUEST.
Classes Filter, FilterChain, FilterConfig para filtragem de servlets
As interfaces a seguir são definidas como parte do pacote javax.servlet:
- Interface de filtro - métodos: doFilter, getFilterConfig, setFilterConfig
- Interface FilterChain - métodos: doFilter
- Interface FilterConfig - métodos: getFilterName, getInitParameter, getInitParameterNames, getServletContext
As classes a seguir são definidas como parte do pacote javax.servlet.http:
- HttpServletRequestWrapper - métodos: Consulte a Especificação Servlet 2.4
- HttpServletResponseWrapper - métodos: Consulte a Especificação Servlet 2.4