如何向来自dropwizard服务的所有出站org.apache.http.client.HttpClient请求添加自定义标头?例如,每当我的dropwizard服务中有来自任何类的出站http请求时,我想添加标题" X-Powered-By:foo"自动。
答案 0 :(得分:3)
我假设您要将其添加到您发出的传出请求中。所以我先添加它。
DW使用平针织物(所以我假设你正在使用球衣客户端做你的戳)。泽西客户端使用apache客户端(或可以使用)来执行实际请求。
Jersey使用过滤器来完成您需要它做的事情。在这种情况下,由于您要为所有请求添加标头,因此您需要使用ClientRequestFilter。考虑这个例子:
public class HeaderTest {
public static void main(String[] args) {
// create the client
Client newClient = ClientBuilder.newClient().register(MyClientRequestFilter.class).register(MyClientRequestPrintingFilter.class);
// make a request
newClient.target("http://google.com").request().get();
}
@Priority(1)
public static class MyClientRequestFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
System.out.println("Added header");
requestContext.getHeaders().add("X-Powered-By", "foo");
}
}
@Priority(2)
public static class MyClientRequestPrintingFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
requestContext.getHeaders().forEach((x,y) -> System.out.println("headerKey:" + x + " HEadervalue:" + y));
}
}
}
班级" MyClientRequestFilter"已注册到每个请求。将始终执行此代码(例如,为每个请求添加标头)。
第二个过滤器只打印请求中的所有标题。运行此代码我得到:
Added header
headerKey:X-Powered-By HEadervalue:[foo]
我相信这就是你所需要的。
或者(如果我误解了),您可以为服务器正在执行的每个响应添加标头。这将是将执行do:
的过滤器(注意:ContainerResponseFilter)public static class MyHeaderResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
responseContext.getHeaders().add("X-Powered-By", "foo");
}
}
测试:
artur@pandaadb:~/dev/eclipse/eclipse_jee$ curl -v "localhost:9085/api/test/asd"
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9085 (#0)
> GET /api/test/asd HTTP/1.1
> Host: localhost:9085
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 24 Aug 2016 09:21:19 GMT
< Content-Type: application/json
< X-Powered-By: foo
< Vary: Accept-Encoding
< Content-Length: 5
<
* Connection #0 to host localhost left intact
Hello
我希望有所帮助!
Artur