= JAX-RS Filter
:index-group: Misc
:jbake-type: page
:jbake-status: published

== ContainerRequestFilter e ContainerResponseFilter

Os filtros podem ser utilizados no seu projeto através da implementação das interfaces ContainerRequestFilter ou ContainerResponseFilter. Cada interface lida com um cenário de filtro separado - entrada ou saída - com parâmetros de função exclusivos para o método *filter * substituído. Note: a anotação **@Provider** na classe é necessária para executar o mapeamento do servlet independente do web.xml.

[note]

NOTE: É possível fazer redirecionamentos usando o argumento ContextRequestFilter fornecido. O método abortWith(Response response) permite que o desenvolvedor altere o destino da solicitação conforme ele é recebido, de acordo com a lógica de filtro fornecida. O código incluído neste exemplo pode ser executado no servidor de aplicação TomEE. As etapas para replicar estão abaixo do snippet de código.

[source,java,numbered]
----
@Provider
public class GenericServletFilter implements ContainerRequestFilter, ContainerResponseFilter {

	/**
	 * Incoming (request) filter
	 */
	@Override
	public void filter(ContainerRequestContext ctx) {
	    // your filter logic
	}

	/**
	 * Outbound (response) filter
	 */
	@Override
	public void filter(ContainerRequestContext requestCtx,
		ContainerResponseContext responseCtx) {
	    // your filter logic
	}

}
----

Etapas para replicar:

   1. Deploy do application e jaxrs-filter.war no diretório webapps.
   2. Servidor de inicialização e vá para http://localhost:8080/jaxrs-filter/test
      * Aqui você deve ser redirecionado para uma página dizendo 401 Unauthorized
   3. Anexe o parâmetro de consulta app_session_id=foobarbaz à mesma URL(http://localhost:8080/jaxrs-filter/test?app_session_id=foobarbaz)
      * Aqui você deve obter acesso. O filtro permite que a solicitação continue e você deve ver algumas informações HTTP básicas sobre a solicitação.

