java spring feign 不带Authorization并且feigin拦截器中请求头不设置Authorization,如何访问其他需要Authorization的服务
时间: 2023-02-18 08:48:34 浏览: 139
可以在Feign拦截器中设置一个全局的Authorization,比如在拦截器中设置一个RequestInterceptor,然后在RequestInterceptor中添加Authorization,这样就可以访问需要Authorization的服务了。
相关问题
java spring feign 没带Authorization如何访问其他需要Authorization的服务
可以尝试使用Spring Cloud Security中的Feign拦截器,以在Feign客户端上添加Authorization信息。可以参考Spring Cloud Security官方文档中关于Feign拦截器的使用指南:https://cloud.spring.io/spring-cloud-security/multi/multi_spring-cloud-feign-security.html
spring cloud 调用feign 如何让spring security 拦截器拦截除了通过FeignClientInterceptor接口拦截器中添加Spring Security的认证信息外...
除了在FeignClientInterceptor接口拦截器中添加Spring Security的认证信息,还可以在Feign配置中添加拦截器,让Spring Security拦截其中的请求。
具体实现步骤如下:
1. 创建一个Feign拦截器,用于向请求中添加Spring Security的认证信息。
```java
public class AuthInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails) {
OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails();
template.header("Authorization", "Bearer " + details.getTokenValue());
}
}
}
```
2. 创建一个Feign配置,将拦截器添加到其中。同时,为了确保Feign调用能够正常进行,需要配置Feign的Encoder和Decoder。
```java
@Configuration
public class FeignConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return new AuthInterceptor();
}
@Bean
public Encoder feignEncoder() {
return new JacksonEncoder();
}
@Bean
public Decoder feignDecoder() {
return new JacksonDecoder();
}
}
```
3. 在FeignClient注解中添加Feign配置类。
```java
@FeignClient(name = "service-name", configuration = FeignConfig.class)
public interface MyFeignClient {
@GetMapping("/api/resource")
ResponseEntity<Resource> getResource();
}
```
这样,在调用MyFeignClient中定义的方法时,Spring Security将会拦截其中的请求,并进行认证和鉴权。
阅读全文