如何调用类扩展ClientRequestFilter以进行客户端筛选

时间:2014-05-26 12:05:06

标签: java rest filter jersey jax-ws

我有一个实现客户端过滤的ClientRequestFilter的类。

import java.io.IOException;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.ext.Provider;

import javax.ws.rs.client.ClientRequestFilter;

import org.glassfish.jersey.server.ContainerRequest;

@Provider
public class checkRequestFilter implements ClientRequestFilter{

    @Override
    public void filter(ClientRequestContext clientRequestContext) throws IOException {
        System.out.println("I am in checkResponseFilter");
    }
}

但我不知道该怎么做才能调用这个过滤器?

我们是否需要在web.xml中添加某种servlet?

2 个答案:

答案 0 :(得分:6)

ClientRequestFilter作用于客户端。因此,您不必将其添加到servlet,而是添加到客户端(假设您使用的是Jersey客户端API)。

当您构建客户端时,您可以执行以下操作:

Client client = ClientBuilder.newClient();
client.register(new CheckRequestFilter()); // your filter
// more filters
WebTarget target = client.target(....

你可以在这里找到一个很好的完整例子: https://jersey.java.net/apidocs/2.9/jersey/org/glassfish/jersey/client/authentication/HttpAuthenticationFeature.html

如果您打算在服务器端使用过滤器,则需要使用ContainerRequestFilter。

答案 1 :(得分:0)

执行此操作的另一个选项:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

cb = ClientBuilder.newBuilder();
client = cb.register(new checkRequestFilter()).build();

还请注意,这是一个客户端过滤器,因此您尝试过滤发送的请求(不是响应)(因此在客户端上注册了过滤器)。