存储JWT令牌

时间:2018-08-27 07:08:41

标签: java spring spring-mvc spring-boot jwt

我正在使用JWT进行身份验证。现在,我想存储在一个类中生成的令牌,以便任何其他类都可以使用它,直到会话过期。最好的方法是什么。我的应用程序在春季启动。 添加更多。我正在制作一个客户端,该客户端使用凭证来访问其他Web服务以获取令牌。现在,我需要将此令牌存储在某个地方,以便其他休息请求可以使用它。 将令牌存储在httpSession中并进一步检索它是否可以。

2 个答案:

答案 0 :(得分:0)

通常,存储JWT令牌不是一个好主意,因为它应该包含所有信息来标识和授权服务用户,而又不会影响数据库/持久层。

但是也许有些情况需要将其保留在用户数据中。在这种情况下,您可以将其存储在表/集合中,并在验证用户身份的同时对其进行检索。

如果您使用的是Spring + Spring Security,则可以在自定义User实现中填充token字段。

您可以通过以下方式检索用户数据:

CustomUser userDetails = (CustomUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

答案 1 :(得分:0)

最好不要存储 JWT 令牌以保护它免受 CSRF 的影响。

但是,如果您无论如何都想坚持或使用它,Spring Boot 中的一种方法是您可以在任何休息请求中包含 @RequestHeader 参数,其值为 "Authorization"< /em> 然后你可以从中取出 jwt 令牌并可以根据你的功能使用它:

@GetMapping("/abc")
public ResponseEntity<String> getToken(
    @RequestHeader(value="Authorization")  String authorizationHeader){
    String jwt = authorizationHeader.substring(7);
    //your functionality
    return ResponseEntity.ok("JWT Token successfully retrieved");
}