ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Spring Security OAuth2 自定义(增强)token信息

2026/8/2 9:59:09 拓冰建站 浏览量
Spring Security OAuth2 自定义(增强)token信息

前言

Spring Security OAuth2提供了默认的token生成方式,但是有时候我们需要token携带一些我们自定义的信息,例如用户名、id等,这就需要我们自定义token信息

自定义token主要流程

1、自定义TokenEnhancer

2、将自定义的TokenEnhancer加入到TokenEnhancerChain中

3、将TokenEnhancerChain设置到AuthorizationServerEndpointsConfigurer 端点配置中,endpoints.tokenEnhancer(tokenEnhancerChain)

自定义TokenEnhancer

TokenEnhancer 是 Spring Security OAuth2 中的一个接口,用于在 OAuth2 的令牌(Token)生成或解析过程中进行增强操作。

具体来说,TokenEnhancer 可以在 OAuth2 的令牌中添加额外的信息,例如用户信息、权限信息等。这个过程通常是在令牌的生成阶段进行的,但是也可以在令牌的解析阶段进行。

TokenEnhancer 的实现类需要实现 enhance 方法,该方法接受一个 OAuth2AccessToken 对象和一个 TokenEnhancerChain 对象,并返回一个增强后的 OAuth2AccessToken 对象。在这个过程中,可以实现各种增强操作,例如添加额外的信息、加密、签名等。

示例:

/*** 自定义token信息*/
public class CustomTokenEnhancer implements TokenEnhancer {@Overridepublic OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {Object principal = authentication.getUserAuthentication().getPrincipal();//使用map来添加信息Map<String, Object> additionalInfo = new HashMap<>();if (principal instanceof PhoneUserDetails){PhoneUserDetails userDetails = (PhoneUserDetails) principal;additionalInfo.put("userId",userDetails.getUserId());additionalInfo.put("userName",userDetails.getUsername());}//将新增信息map设置进token((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);return accessToken;}}

配置类配置

AuthorizationServerConfigurerAdapter配置类配置

    @Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {// TokenEnhancerChain为token增强链,可以添加多个token增强器TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();List<TokenEnhancer> delegates = new ArrayList<>();delegates.add(tokenEnhancer());tokenEnhancerChain.setTokenEnhancers(delegates);endpoints.tokenEnhancer(tokenEnhancerChain);}@Beanpublic TokenEnhancer tokenEnhancer() {return new CustomTokenEnhancer();}
}