在jax-rs中设置承载头

时间:2016-08-18 11:08:08

标签: java rest java-ee http-headers jax-rs

所以我使用了这个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

1 个答案:

答案 0 :(得分:0)

标头必须包含在客户端中,而不是服务器中。一般流程是这个

1)客户端使用凭据在您的服务中进行身份验证,然后服务器构建令牌并将其返回给客户端,客户端将令牌存储在安全存储中

2)客户端执行请求并在标头中包含令牌。

POST / yourservice 授权:持有者

3)服务器检查标头,提取令牌并验证它