spring cloud 调用feign 如何让spring security 拦截器拦截除了通过FeignClientInterceptor接口拦截器中添加Spring Security的认证信息外...
时间: 2023-07-04 19:27:52 浏览: 180
spring boot如何使用spring AOP实现拦截器
除了在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将会拦截其中的请求,并进行认证和鉴权。
阅读全文