如何添加自定义头到所有出站org.apache.http.client.HttpClient请求从dropwizard服务?例如,每当有一个出站http请求从任何类在我的dropwizard服务,我想添加一个标题"X-Powered-By:foo"自动到它。
我假设您想将其添加到您戳的传出请求中。我先加上这个。
DW使用jersey(所以我假设您正在使用jersey客户机来执行您的任务)。jersey客户机使用(或可以使用)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]
我相信这就是你所需要的。
或者(如果我误解了),您可以为服务器正在执行的每个响应添加标头。这将是过滤器(注意:ContainerResponseFilter),它将执行do:
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
我希望这对你有帮助!
阿图尔