Java Jersey客户端(2.x)不发送我的GET请求头
我已经调试了三个小时,我仍然无法解释为什么我的自定义头(通过客户端请求过滤器注册)没有被发送 客户端的配置如下(完整源): 过滤器如下所示:Java Jersey客户端(2.x)不发送我的GET请求头,java,rest,jersey-2.0,jersey-client,Java,Rest,Jersey 2.0,Jersey Client,我已经调试了三个小时,我仍然无法解释为什么我的自定义头(通过客户端请求过滤器注册)没有被发送 客户端的配置如下(完整源): 过滤器如下所示: public class VidalRequestFilter implements ClientRequestFilter { private final ApiCredentials credentials; public VidalRequestFilter(ApiCredentials credentials) {
public class VidalRequestFilter implements ClientRequestFilter {
private final ApiCredentials credentials;
public VidalRequestFilter(ApiCredentials credentials) {
this.credentials = credentials;
}
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
headers.add(ACCEPT, APPLICATION_ATOM_XML_TYPE);
headers.add("app_id", credentials.getApplicationId());
headers.add("app_key", credentials.getApplicationKey());
}
}
我得到的全部是403禁止,因为我正在调用的特定端点受到保护(使用上面定义的自定义头执行身份验证)
最奇怪的是,当我调试时,我看到sun.net.www.MessageHeader
在请求写入期间被正确调用(即实例的值如下:sun.net.www)。MessageHeader@14f9390f7成对:{GET/rest/api/packages HTTP/1.1:null}{Accept:application/atom+xml}{app_id:XXX}{app_key:YYY}{用户代理:Jersey/2.22.1(HttpUrlConnection 1.8.0_45)}{主机:ZZZ}{连接:保持活动状态}
但是,我已经确认,无论是我们的API服务器,还是它的反向代理,都没有收到带有所需的auth头的GET请求(尽管第一个头请求似乎还可以)
我确信凭证是好的,因为等效的curl命令可以正常工作
在定义调用时,我尝试了直接设置头的简单方法,但没有成功
我遗漏了什么?标题正在顺利通过。我正在通过Fiddler代理,可以看到所有的标题都在那里。那么,我将在服务器端进行一些调查。感谢您的测试。我在本地服务器上进行了测试,并且正确发送了标题。这似乎与另一个基础架构问题有关。我想我现在就结束这个问题。下面是标题正在顺利通过。我正在通过Fiddler代理,可以看到所有的标题都在那里。那么,我将在服务器端进行一些调查。感谢您的测试。我在本地服务器上进行了测试,并且正确发送了标题。这似乎与另一个基础架构问题有关。我想我现在结束这个问题。
public class VidalRequestFilter implements ClientRequestFilter {
private final ApiCredentials credentials;
public VidalRequestFilter(ApiCredentials credentials) {
this.credentials = credentials;
}
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
headers.add(ACCEPT, APPLICATION_ATOM_XML_TYPE);
headers.add("app_id", credentials.getApplicationId());
headers.add("app_key", credentials.getApplicationKey());
}
}
String response = webTarget
.path("api/packages")
.request()
.get()
.readEntity(String.class);