有人可以向我解释为什么基本身份验证工作正常,而且摘要无法正常工作或者无法显示在服务器上的http标头中。
public String login(UserDTO user)
{
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client client = Client.create(clientConfig);
// client.addFilter(new HTTPBasicAuthFilter(user.getUsername(), user.getPassword()));
client.addFilter(new HTTPDigestAuthFilter(user.getUsername(), user.getPassword()));
ClientResponse response = client.resource(url + "user/login").accept("application*json").type("application/json").get(ClientResponse.class);
System.out.println(response.toString());
return null;
}
如果我使用:
client.addFilter(new HTTPBasicAuthFilter(user.getUsername(), user.getPassword()));
我在服务器上获得了一个授权标题:
USER LOGIN REQUEST
request:uri: /StambomenWebAPI/rest/user/login
method: GET
QueryString: null
Parameters:
Headers:
Name: accept Value: application*json
Name: content-type Value: application/json
Name: authorization Value: Basic QXhsOkxvbA==
Name: user-agent Value: Java/1.7.0_51
Name: host Value: localhost:8084
Name: connection Value: keep-alive
USER AND PASS[XXXXX, XXXXX]
但是当我使用
时 client.addFilter(new HTTPDigestAuthFilter(user.getUsername(), user.getPassword()));
我没有得到授权标题字段......:s?
使用带有tomcat v7的球衣
我的问候和提前帮助
答案 0 :(得分:2)
由于摘要式身份验证工作流,您未获得授权标头字段。有关详细信息,请参阅here,但基本上是:
Authorization
标题服务器响应401状态和WWW-Authenticate
标题,如下所示:
Digest realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
客户端使用正确的Authorization
标头重复请求,因为它具有来自服务器的摘要信息
从客户端来看,这一切都由Jersey HTTPDigestAuthFilter
处理。因此,过滤器首先发出没有Authorization
标头的请求,并且您的服务器应返回401状态,其中WWW-Authenticate
标头具有必要的摘要信息。然后,过滤器使用正确的Authorization
标头重复请求,您的服务器应进行身份验证并返回内容。
在初始握手之后,HTTPDigestAuthFilter
会记住必要的摘要信息,因此对于第一次请求后的所有请求,都会包含Authorization
标题。