在 feign 的配置类中设置自定义的认证信息传递方式,例如使用 RequestInterceptor 接口,在 apply 方法中设置自定义的认证信息传递方式,例如将认证信息存储在一个公共的头部中,然后在 feign 调用时将头部信息传递到被调用服务中
时间: 2024-02-24 07:00:39 浏览: 57
是的,使用 `RequestInterceptor` 接口可以在 feign 的请求中设置自定义的请求头信息,从而传递认证信息。具体的实现步骤如下:
1. 定义一个实现 `RequestInterceptor` 接口的类,例如 `AuthInterceptor`。
```java
public class AuthInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// 在请求头中添加认证信息
template.header("Authorization", "Bearer " + getToken());
}
private String getToken() {
// 从某个地方获取认证信息,例如从 ThreadLocal 中获取
return AuthContextHolder.getContext().getToken();
}
}
```
2. 在 feign 的配置类中注册 `AuthInterceptor`,例如 `FeignConfig`。
```java
@Configuration
public class FeignConfig {
@Bean
public AuthInterceptor authInterceptor() {
return new AuthInterceptor();
}
@Bean
public RequestInterceptor headerInterceptor() {
return template -> {
// 在请求头中添加公共的信息,例如 Content-Type
template.header("Content-Type", "application/json");
};
}
}
```
3. 在 feign 的请求接口中使用 `@RequestLine` 注解指定请求方法和请求路径,例如:
```java
@FeignClient(name = "example-service")
public interface ExampleServiceClient {
@RequestLine("GET /api/example")
List<Example> getExamples();
}
```
这样在 feign 调用时,`AuthInterceptor` 中的认证信息和 `FeignConfig` 中的公共信息都会被添加到请求头中,从而解决了被调用模块未开启鉴权,feign 调用报 401 的问题。
阅读全文