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