我有一个java客户机,它向服务器发送rest请求。服务器具有基于cookie的身份验证。在服务器上升级后,客户端成功地在服务器上进行身份验证,但我在进一步的请求中收到以下错误:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
cookie管理器是这样设置的:
static {
CookieManager manager = new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);
CookieHandler.setDefault(manager);
}
请求是这样提出的:
public Response getSomething() {
return client.
target(domainName + REST_URI)
.request(MediaType.APPLICATION_JSON)
.get();
}
经过一些测试,我想我已经找到了问题所在。我在登录后打印存储在cookie manager中的cookie,似乎有些东西没有正确存储(可能cookie被服务器格式化了?):
ssocookie=ssocookie-2
iPlanetDirectoryPro="S1~ZaMPXQMYx70zculh6t7Ea2A4BGw.*AAJTSQACMDIAAlNLABxnaFQvSWdZTWtqUFQzZlVlcUQxSG93UW5HSVE9AAR0eXBlAANDVFMAAlMxAAA.*";$Path="/";$Domain="serverurl.test.local"
amlbcookie="02";$Path="/";$Domain="serverurl.test.local"
如你所见,有一个“$路径等。。。在从其他服务器(尚未升级)收到的Cookie中看不到
然后我尝试通过以下方式在请求中“手动”添加cookie:
public Response getSomething() {
return client.
target(domainName + REST_URI)
.request(MediaType.APPLICATION_JSON)
.cookie("iPlanetDirectoryPro", "S1~ZaMPXQMYx70zculh6t7Ea2A4BGw.*AAJTSQACMDIAAlNLABxnaFQvSWdZTWtqUFQzZlVlcUQxSG93UW5HSVE9AAR0eXBlAANDVFMAAlMxAAA.*")
.get();
}
而且成功了。所以这就证实了这个饼干的存储有问题。我声明同一个客户机可以与其他服务器正常工作,因此问题出在这个特定服务器的cookie上。既然我没有办法对服务器端进行任何更改,那么有没有办法让cookie管理器也正确处理这个cookie呢?
p、 我也用python做了同样的尝试,我没有问题!
暂无答案!
目前还没有任何答案,快来回答吧!