Preloader image

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.

É 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.
@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.