我有一个实现客户端过滤的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中添加一些servlets?
客户端RequestFilter在客户端发挥作用。因此,你不必把它添加到servlet中,而是添加到客户端(假设你使用Jersey客户端API)。
当你建立你的客户端时,你要做这样的事情。
Client client = ClientBuilder.newClient();
client.register(new CheckRequestFilter()); // your filter
// more filters
WebTarget target = client.target(....
你可以在这里找到一个很好的完整的例子:https:/jersey.java.netapidocs2.9jerseyorgglassfishjerseyclientauthenticationHttpAuthenticationFeature.html。
如果你的意思是在服务器端使用过滤器,你需要使用ContainerRequestFilter。
另一个选项来实现这个目的。
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
cb = ClientBuilder.newBuilder();
client = cb.register(new checkRequestFilter()).build();
还要注意的是,这是一个客户端的过滤器,所以你试图过滤一个请求(无应答),您发送的(因此您在客户端注册过滤器)。