Oauth2认证下Jwt增强器中添加当前用户信息

223 阅读1分钟

实现TokenEnhancer接口

@Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
    
    //oauth认证中authentication.getUserAuthentication().getPrincipal()的结构和org.springframework.security.core.userdetails.User类结构是一致的,所以强制转化后就能拿到当前用户的信息
        User principal = (User) authentication.getUserAuthentication().getPrincipal();
        Map<String,Object> info = new HashMap<>();
        info.put("userName",principal.getUsername());   //添加当前的用户名,后续用来查找该用户的所有信息
        ((DefaultOAuth2AccessToken)accessToken).setAdditionalInformation(info);
        return accessToken;
    }

在授权服务器的configure(AuthorizationServerEndpointsConfigurer endpoints)中配置jwt增强器

 //配置JWT内容增强器
        TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
        List<TokenEnhancer> delegates = new ArrayList<>();
        delegates.add(jwtTokenEnhancer);
        delegates.add(jwtAccessTokenConverter);     //jwt转换

        enhancerChain.setTokenEnhancers(delegates);
        
        
        endpoints//配置存储令牌策略
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter)
                .tokenEnhancer(enhancerChain);