首页 > 解决方案 > CustomClientDetailsS​​ervice 在我的 AuthorizationServer 上运行 6 次

问题描述

我让我的授权服务器使用 spring-oauth2 @EnableAuthorizationServer 的自动配置,其中我有自己的自定义 ClientDetailService 服务,我做得很好但我有一个问题,事实证明,在调用端点时,所述服务运行了 6 次 [ oauth / token],我不确定这是正常行为,但我希望它只执行一次,因为我在其中调用我的数据库。请您的支持。

我的配置:

@Configuration
@EnableAuthorizationServer
@Slf4j
public class AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private ApplicationJwtAccessTokenConverter applicationJwtAccessTokenConverter;

    @Autowired
    private ApplicationOauth2Service applicationOauth2Service;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(applicationOauth2Service);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints
                .tokenEnhancer(applicationJwtAccessTokenConverter)
                .tokenStore(jwtTokenStore());
    }

    @Bean
    public JwtTokenStore jwtTokenStore() {
        return new JwtTokenStore(applicationJwtAccessTokenConverter);
    }

}

我的客户详细信息服务:

@Service
@Slf4j
public class ApplicationOauth2Service implements ClientDetailsService {

    @Autowired
    UserRepository userRepository;

    User user;

    public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {

        BaseClientDetails details = new BaseClientDetails();
        details.setAuthorizedGrantTypes(Collections.singletonList("client_credentials"));

        user = userRepository.findByEmail(clientId);

        if (null == user) {
            throw new NoSuchClientException("No client with requested id: " + clientId);
        }

        details.setClientId(user.getAuth().getEmail());
        details.setClientSecret(user.getAuth().getPassword());

        return details;
    }

}

我的控制台输出:

在此处输入图像描述

标签: javaspring-bootspring-security-oauth2

解决方案


推荐阅读