我正在实现一个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;
}
}
答案 0 :(得分:0)
@DependsOn
注释可以提供帮助。
来自文档:
...在不通过属性或构造函数参数显式依赖另一个Bean而是依赖于另一个Bean初始化的副作用的情况下,很少使用。 ...
您可以尝试将@Depends("discoveryClient")
添加到实现身份验证服务客户端的类中。
注意:我尚未测试bean名称是否应为discoveryClient
。如果这不起作用,请查看调试日志以查看正确的bean名称。