Tar*_*tar 3 spring spring-security jwt spring-boot spring-security-oauth2
我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)
我尝试了类似上述的操作,但无法访问令牌,我仅获得用户名。在Spring Boot中有没有办法做到这一点?
任何帮助,将不胜感激。
Karl提供的答案应该可以解决您的问题。
除了该答案之外,您还可以使用以下方法并在代码中的任何位置访问令牌
public static String getToken() {
String token = null;
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
}
return token;
}
Run Code Online (Sandbox Code Playgroud)
鞑靼,
UI是否将令牌作为请求中的标头发送?如果是这种情况,则可以在方法中使用@RequestHeader批注获取该值
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token)
Run Code Online (Sandbox Code Playgroud)
注意:对于本示例,“授权”是包含令牌的标题名称,这可以是自定义标题名称。
干杯!
归档时间: |
|
查看次数: |
3012 次 |
最近记录: |