accessTokenConverter与tokenEnhancer的区别
来源:8-1 课程总结

萌白在努力
2019-11-28
在课程中,我看到老师是直接将jwtAccessTokenConverter放到tokenEnhancer中,我在学习本课程前是使用上面这种方式来存放的,tokenEnhancer可存放一些额外的信息。在网上看到一些大大是建议将jwtAccessTokenConverter与tokenEnhancer存放在一个TokenEnhancerChain里再放到tokenEnhancer中。请问这三者的区别:
第一种,像老师这样
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.userDetailsService(userDetailsService)
.tokenEnhancer(jwtAccessTokenConverter)
.authenticationManager(authenticationManager);
}
第二种,我在jwtTokenEnhancer中增加了额外的信息,jwtAccessTokenConverter另外交给accessTokenConverter
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.userDetailsService(userDetailsService)
.tokenStore(tokenStore())
.accessTokenConverter(jwtAccessTokenConverter)
.tokenEnhancer(jwtTokenEnhancer)
.authenticationManager(authenticationManager);
}
第三种,结合到TokenEnhancerChain 中,并且也是将jwtAccessTokenConverter另外交给accessTokenConverter
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore)
.authenticationManager(authenticationManager)
.userDetailsService(userDetailsService);
if (jwtAccessTokenConverter != null && jwtTokenEnhancer !=null){
TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
List<TokenEnhancer> enhancers = new ArrayList<>();
enhancers.add(jwtTokenEnhancer);
enhancers.add(jwtAccessTokenConverter);
enhancerChain.setTokenEnhancers(enhancers);//将自定义Enhancer加入EnhancerChain的delegates数组中
endpoints.tokenEnhancer(enhancerChain)//为什么不直接把jwtTokenEnhancer加在这个位置呢?
.accessTokenConverter(jwtAccessTokenConverter);
}
}
网上大多采用第三种,请问老师这三种的区别是什么?我尤其无法弄懂.accessTokenConverter()的作用
写回答
1回答
-
JoJo
2019-11-29
AccessTokenConverter作用是把token字符串转换成OAuth2AccessToken对象。
TokenEnhancer作用是在OAuth2AccessToken里添加额外的信息。
JwtAccessTokenConverter 即实现了AccessTokenConverter接口,也实现了TokenEnhancer接口。
012020-04-15
相似问题