【发布时间】:2021-03-22 00:16:35
【问题描述】:
我目前正在尝试编写一个 Spring Boot 启动器,该启动器将自动使用 API 网关对我们的微服务进行身份验证,并将访问令牌包含在所有传出请求的标头中(朝向网关)。
我正在创建一个 RestTemplate bean 并为其提供我们的自定义拦截器,但我的问题是,这样做会阻止其他团队(将使用此启动器)使用他们自己的 RestTemplate 配置,因为他们必须定义同一个 bean,导致多个 bean 存在。
@Bean
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
if (interceptors.isEmpty()){
interceptors = new ArrayList<>();
}
interceptors.add(clientCredentialsAuthInterceptor());
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
是否有其他方法可以拦截所有传出请求或使 RestTemplate 进一步可配置?
【问题讨论】:
-
理想情况下,您的项目应该使用
RestTemplateBuilder创建RestTEmplate的实例,这反过来会自动检测所有预先注册的拦截器。您的 autp-config 唯一要做的就是为拦截器制作一个 bean。或者定义一个添加拦截器的RestTemplateCustomizer。但是,这仅在团队遵循使用RestTemplateBuilder创建实例的做法时才有效。
标签: java spring-boot resttemplate