Spring通过Eureka从身份验证服务获取公钥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring通过Eureka从身份验证服务获取公钥相关的知识,希望对你有一定的参考价值。
我正在实现一个使用公钥验证JWT令牌的Spring Security Resource Server。 我正在尝试通过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;
}
}
答案
@DependsOn
注释可以帮助。
来自docs:
...在bean没有通过属性或构造函数参数显式依赖于另一个bean的情况下很少使用,而是依赖于另一个bean初始化的副作用。 ...
您可以尝试将@Depends("discoveryClient")
添加到实现auth-service客户端的类中。
注意:我没有测试bean名称是否应该是discoveryClient
。如果这不起作用,请参阅调试日志以查看正确的bean名称。
以上是关于Spring通过Eureka从身份验证服务获取公钥的主要内容,如果未能解决你的问题,请参考以下文章
如何使用基本身份验证保护 Spring Cloud Eureka 服务?
Spring Cloud Eureka Netflix zuul 过滤器