java Restlet请求对象不包含身份验证信息
我使用的代码库有两个版本:第一个(旧的)版本使用v1。0.0版本,后者(较新)版本使用v2。2.2.
当用户使用cURL查询两个版本的my service,并将其用户名和密码作为base64编码的String
提供时,它就起作用了。类似地,两个版本都接受Authorization: Basic ...
头中编码的String
它们的不同之处在于,当我尝试使用HttpURLConnection
调用服务时。前者有效,后者无效
以下是调用我的服务的工具的工作原理:
final String xx_userid = userid; // userid set above
final String xx_pwd = pwd; // pwd set above
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
xx_userid, xx_pwd.toCharArray());
}
});
// ... some more code ...
URL url = new URL(url_string); // url_string is the endpoint of my service
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Accept", "text/xml");
上面的代码适用于较旧的代码库(也就是说,我得到了一个200 OK
以及预期的XML响应)。然而,对于新的代码库,我得到了一个403 Unauthorized
下面是我的新代码库中的代码片段,它应该从请求中获取用户名和密码:
@Override
protected boolean authenticate (Request request, Response response) {
String user = null;
String pass = null;
user = request.getChallengeResponse().getIdentifier();
pass = new String(request.getChallengeResponse().getSecret());
// ... some more code ...
}
user
和pass
最后都停留在null
,因为getChallengeResponse()
方法返回null
有人知道为什么这段代码适用于v1吗。0.0版本,但不适用于v2。2.2? 还是我还遗漏了什么
其他一些(可能不相关)信息:
- 旧代码库:
- 正在Tomcat v7中运行。0.55
- 托管在RHEL7计算机上
- 没有负载平衡器
- 新的代码库:
- 正在Tomcat v7中运行。0.55
- 托管在EC2实例(Amazon Linux AMI)上
- 使用Amazon的应用程序负载平衡器(ALB)指向不同的EC2实例
- 负载平衡器的域名与服务实例的域名不同
提前谢谢。请让我知道,如果有任何更多的信息,我可以提供,使这更容易调试
共 (0) 个答案