在AuthorizationServerConfigurerAdapter,重寫一個TokenServices,注意這里的@Primary 非常重要,否則會有3個同類型的Bean,無法注入,會拋出以下異常
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.security.oauth2.provider.token.ResourceServerTokenServices' available: expected single matching bean but found 3: consumerTokenServices,defaultAuthorizationServerTokenServices,tokenServices
Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a single bean, but 3 were found:
@Primary @Bean public AuthorizationServerTokenServices tokenServices() { DefaultTokenServices defaultTokenServices = new DefaultTokenServices(); defaultTokenServices.setAccessTokenValiditySeconds(-1); defaultTokenServices.setRefreshTokenValiditySeconds(-1); defaultTokenServices.setSupportRefreshToken(true); defaultTokenServices.setReuseRefreshToken(false); defaultTokenServices.setTokenStore(tokenStore()); return defaultTokenServices; }
在這里設置進去
@Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenServices(tokenServices()); }