问题
在AuthorizationServerConfigurerAdapter.configure(AuthorizationServerEndpointsConfigurer endpoints)方法中配置了
endpoints.tokenEnhancer();但是没有生效。
要加强token是因为原始token信息带的太少,需要附加一些额外信息给调用方
解决
看了一下config里面,配置的tokenEnhancer实际上是给TokenService用的。
security默认生成一个DefaultTokenService,这里set了TokenEnhancer,但是这个系统里我是自定义的TokenService,因为要配置一些失效时间,所以默认没用了,这个endopoints配置也就没用了,到TokenService里自行配置即可
这是配置类,省略了不相关的代码
@Configuration
@AllArgsConstructor
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
TokenEnhancer customTokenEnhancer = XXX;
endpoints
.tokenServices(tokenService)
.tokenEnhancer(customTokenEnhancer );
}
}
点进父类看一下,这个tokenEnhancer()实际在下面代码被调用了,也就是他是tokenService的一部分
private DefaultTokenServices createDefaultTokenServices() {
DefaultTokenServices tokenServices = new DefaultTokenServices();
tokenServices.setTokenStore(tokenStore());
tokenServices.setSupportRefreshToken(true);
tokenServices.setReuseRefreshToken(reuseRefreshToken);
tokenServices.setClientDetailsService(clientDetailsService());
tokenServices.setTokenEnhancer(tokenEnhancer());
addUserDetailsService(tokenServices, this.userDetailsService);
return tokenServices;
}
在其他方法中可以看到,如果tokenService被覆盖的话,这个设值是无效的
private AuthorizationServerTokenServices tokenServices() {
if (tokenServices != null) {
return tokenServices;
}
this.tokenServices = createDefaultTokenServices();
return tokenServices;
}
因此加强token设置了之后没有生效。