Spring извлекает открытый ключ из сервиса аутентификации через Eureka - PullRequest
0 голосов
/ 20 декабря 2018

Я использую Spring Security Resource Server, который проверяет токены JWT с открытым ключом.
Я пытаюсь получить открытый ключ из созданной мной службы аутентификации через службу Eureka.
выборка, происходящая при запуске службы, до того, как служба регистрируется на Eureka.
Итак, при вызове службы аутентификации выдается исключение UnknownHostException.
Могу ли я изменить порядок и установить ключ сразу после завершения регистрации Eureka?

@EnableResourceServer
public class MyResourceServerConfig extends 
AuthorizationServerConfigurerAdapter {

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        return defaultTokenServices;
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(accessTokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();

        HttpEntity<Void> request = new HttpEntity<Void>(new HttpHeaders());
        ResponseEntity<Map> responseEntity = restTemplate.exchange(AUTH_URI, HttpMethod.GET, request, Map.class);
        String publicKey = (String) responseEntity.getBody().get("value");            
        converter.setVerifierKey(publicKey);

        return converter;
    }
}

1 Ответ

0 голосов
/ 05 января 2019

@DependsOn может помочь аннотация.

Из документов:

... Используется нечасто в тех случаях, когда бин явно не зависит от другогочерез свойства или аргументы конструктора, но скорее зависит от побочных эффектов инициализации другого компонента....

Вы можете попробовать добавить @Depends("discoveryClient") в класс, реализующий клиент службы аутентификации.

Примечание: я не проверял, должно ли имя компонента быть discoveryClient,Пожалуйста, смотрите журналы отладки, чтобы увидеть правильное имя компонента, если это не работает.

...