所以我使用了这个question的答案作为基于令牌的身份验证的教程。但是我仍然有设置授权标题的问题。
在我的authenticateUser方法中,我试图建立一个承载标题,这是代码
@POST
@Path("/users/authentication")
@Produces("application/json")
@Consumes("application/x-www-form-urlencoded")
public Response getUsers(@FormParam("username") String username,
@FormParam("password") String password){
try{
if(userDao.existUser(username, password)){
User uUser = new User(userDao.getUser(username, password));
uUser.setToken(userDao.issueToken());
uUser.setTokenExpDate();
userDao.updateUser(uUser);
Response response = Response.ok(userDao.getUser(uUser.getId()).getToken())
.header(HttpHeaders.AUTHORIZATION, "Bearer "+userDao.getUser(uUser.getId()).getToken())
.build();
System.out.println(response.getHeaderString(HttpHeaders.AUTHORIZATION));
return response;
}
}catch(Exception e){
return Response.status(Response.Status.UNAUTHORIZED).build();
}
return null;
}
正如你所看到的那样,我将它设置在响应变量上并且就在那里。但是一旦我转到安全方法并且我的AuthenticationFilter激活,我发现我从requestContext获得的标头是null。在这种情况下,如何正确地将令牌发送到此标头? Here's my full code
答案 0 :(得分:0)
标头必须包含在客户端中,而不是服务器中。一般流程是这个
1)客户端使用凭据在您的服务中进行身份验证,然后服务器构建令牌并将其返回给客户端,客户端将令牌存储在安全存储中
2)客户端执行请求并在标头中包含令牌。
POST / yourservice 授权:持有者
3)服务器检查标头,提取令牌并验证它