首页 > 解决方案 > 在服务类方法中访问 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());  
    }  

标签: spring-bootspring-mvcspring-security-oauth2

解决方案


您可以OAuth2AuthorizedClient在构造的服务类中注入(也称为自动装配)。

您可以访问服务类中的安全主体,如下所示:

 SecurityContextHolder.getContext().getAuthentication()

推荐阅读