spring-boot - 在服务类方法中访问 Oauth 客户端和 Principal
问题描述
我正在使用spring-boot-starter-oauth2-resource-server
依赖项实现资源服务器。我指的是下面的代码,在Controller
方法内部,我们已经注入了依赖项,Spring 将使用反射自动注入 auth-client 和主体。
如果我想在服务类中定义的方法中访问这些对象怎么办?在服务类中调用方法时,我不想将这些值作为参数传递。请让我知道,如何在服务类中访问这些对象。
@RequestMapping("/oauthinfo")
@ResponseBody
public String oauthUserInfo(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient,
@AuthenticationPrincipal OAuth2User oauth2User) {
return
"User Name: " + oauth2User.getName() + "<br/>" +
"User Authorities: " + oauth2User.getAuthorities() + "<br/>" +
"Client Name: " + authorizedClient.getClientRegistration().getClientName() + "<br/>" +
this.prettyPrintAttributes(oauth2User.getAttributes());
}
解决方案
您可以OAuth2AuthorizedClient
在构造的服务类中注入(也称为自动装配)。
您可以访问服务类中的安全主体,如下所示:
SecurityContextHolder.getContext().getAuthentication()
推荐阅读
- javascript - 如何编写 if 语句的第一行来测试时钟是否在点上的一个小时
- php - 如何阅读邮件正文
- vue.js - Vue js不能拖动输入类型文件
- spring-boot - Spring Mail Sender 使用 Gmail SMTP 错误。我该如何解决?
- javascript - 为什么尽管存在终止条件,但无限循环仍然存在?
- android - 无法在 MacOS 中使用 Buildozer 构建 kivy (python 2) apk [Errno 套接字错误] [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
- python - Django 和 TinyMCE: NameError: name 'url' is not defined
- swift - 在 Swift 中的 ViewController 之间共享设备 CLLocation 的最佳方法是什么?
- javascript - 无渲染组件的酶浅返回未定义
- responsive - 什么是响应式网站,为什么要使用它们,以及如何开发它们?