我有一个实现客户端过滤的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?
答案 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();
还请注意,这是一个客户端过滤器,因此您尝试过滤发送的请求(不是响应)(因此在客户端上注册了过滤器)。