说明
有时候我们需要扩展JWT中存储的内容,这里我们在JWT中扩展一个 key为enhance,value为enhance info 的数据。 继承TokenEnhancer实现一个JWT内容增强器
建议不要把太多的数据都塞到jwt里面,你可以直接给一个标识id去塞里面,这样也不会太大,解析完了之后取出来这个标识id后可以通过查询来获取想要的信息
代码地址
https://gitee.com/zjj19941/ZJJ_Neaten5.10/tree/master/ZJJ_SpringCloud_Oauth2/demo05
代码配置步骤
/*** JWT内容增强器*/@Componentpublic class JwtTokenEnhancer implements TokenEnhancer {@Overridepublic OAuth2AccessToken enhance(OAuth2AccessToken accessToken,OAuth2Authentication authentication) {Map<String, Object> info = new HashMap<>();// 这里演示是写死了,实际情况下可以动态的查询塞进去//建议不要把太多的数据都塞到jwt里面,你可以直接给一个标识id去塞里面,//这样也不会太大,解析完了之后取出来这个标识id后可以通过查询来获取想要的信息info.put("enhance", "enhance info");((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);return accessToken;}}
在授权服务器配置中配置JWT的内容增强器
@Autowiredprivate JwtTokenEnhancer jwtTokenEnhancer;@Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {//配置JWT的内容增强器TokenEnhancerChain enhancerChain = new TokenEnhancerChain();List<TokenEnhancer> delegates = new ArrayList<>();delegates.add(jwtTokenEnhancer);delegates.add(jwtAccessTokenConverter);enhancerChain.setTokenEnhancers(delegates);endpoints.authenticationManager(authenticationManagerBean) //使用密码模式需要配置.tokenStore(tokenStore) //配置存储令牌策略.accessTokenConverter(jwtAccessTokenConverter).tokenEnhancer(enhancerChain) //配置tokenEnhancer.reuseRefreshTokens(false) //refresh_token是否重复使用.userDetailsService(userService) //刷新令牌授权包含对用户信息的检查.allowedTokenEndpointRequestMethods(HttpMethod.GET,HttpMethod.POST); //支持GET,POST请求}
测试
{"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJmb3giLCJzY29wZSI6WyJhbGwiXSwiZXhwIjoxNjQ0MjkwNDI2LCJhdXRob3JpdGllcyI6WyJhZG1pbiJdLCJqdGkiOiIzOGRkOTEwZC1lYTIzLTRlNmItYTJkMC00YjdlY2MzOWU3MzUiLCJjbGllbnRfaWQiOiJjbGllbnQiLCJlbmhhbmNlIjoiZW5oYW5jZSBpbmZvIn0.t-wRIcK24u-LEGDqIfEI3WL735uPRyBNJiCl_SFrK2c","token_type": "bearer","refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJmb3giLCJzY29wZSI6WyJhbGwiXSwiYXRpIjoiMzhkZDkxMGQtZWEyMy00ZTZiLWEyZDAtNGI3ZWNjMzllNzM1IiwiZXhwIjoxNjQ1MTU0MzY2LCJhdXRob3JpdGllcyI6WyJhZG1pbiJdLCJqdGkiOiIzMmI0OWE5Mi05ZWU2LTQxMDctYmMzYS1hZDBhMzU5NzgyNGMiLCJjbGllbnRfaWQiOiJjbGllbnQiLCJlbmhhbmNlIjoiZW5oYW5jZSBpbmZvIn0.oMdkFseeIJSZM9ur4iY2BpCrJ_cA_M5q-_oEwSfW7z4","expires_in": 59,"scope": "all","enhance": "enhance info","jti": "38dd910d-ea23-4e6b-a2d0-4b7ecc39e735"}
拿着access_token去解析
https://www.box3.cn/tools/jwt.html
可以发现多了扩展属性
