从 Spring Boot Rest 控制器访问 JWT 令牌
Accessing JWT Token from a Spring Boot Rest Controller
我正在使用 Spring Boot 实现 REST API,并使用 JWT 和 Oauth 2 保护它。
我在身份验证和生成访问令牌方面没有问题。
当用户发出请求时,我想从控制器访问其 JWT 令牌。
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth) {
logger.info("CREDENTIALS:" + auth.getCredentials().toString());
logger.info("PRINCIPAL:" + auth.getPrincipal().toString());
logger.info("OAuth2Request:" + auth.getOAuth2Request());
logger.info("UserAuthentication:" + auth.getUserAuthentication());
return userService.findAllUsers();
}
我尝试了类似上面的方法,但无法访问令牌,我只能获取用户名。有没有办法在 Spring Boot 中实现这一点?
如有任何帮助,我们将不胜感激。
鞑靼人,
UI 是否在请求中将令牌作为 header 发送?如果是这种情况,那么您可以在方法
中使用 @RequestHeader
注释来获取该值
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token)
注意:对于此示例,Authorization
是包含令牌的 header 名称,这可以是自定义的 header 名称。
干杯!
Karl 提供的答案应该可以解决您的问题。
除上述答案外,您还可以使用以下方法在代码中的任意位置访问令牌
public static String getToken() {
String token = null;
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
}
return token;
}
我正在使用 Spring Boot 实现 REST API,并使用 JWT 和 Oauth 2 保护它。
我在身份验证和生成访问令牌方面没有问题。
当用户发出请求时,我想从控制器访问其 JWT 令牌。
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth) {
logger.info("CREDENTIALS:" + auth.getCredentials().toString());
logger.info("PRINCIPAL:" + auth.getPrincipal().toString());
logger.info("OAuth2Request:" + auth.getOAuth2Request());
logger.info("UserAuthentication:" + auth.getUserAuthentication());
return userService.findAllUsers();
}
我尝试了类似上面的方法,但无法访问令牌,我只能获取用户名。有没有办法在 Spring Boot 中实现这一点?
如有任何帮助,我们将不胜感激。
鞑靼人,
UI 是否在请求中将令牌作为 header 发送?如果是这种情况,那么您可以在方法
中使用@RequestHeader
注释来获取该值
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token)
注意:对于此示例,Authorization
是包含令牌的 header 名称,这可以是自定义的 header 名称。
干杯!
Karl 提供的答案应该可以解决您的问题。
除上述答案外,您还可以使用以下方法在代码中的任意位置访问令牌
public static String getToken() {
String token = null;
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
}
return token;
}