在SpringCloud 使用Security+Oauth2 时候再去使用fegin,发现出现401未授权
时间: 2023-11-27 19:50:19 浏览: 139
在SpringCloud 使用Security+Oauth2 时候再去使用fegin,发现出现401未授权
4星 · 用户满意度95%
在使用Spring Cloud Security和OAuth2时,可能会出现401未授权的问题。这通常是由于Feign客户端没有传递OAuth2令牌所致。
为了解决这个问题,需要在Feign客户端上配置一个拦截器,以便在每个请求中传递OAuth2令牌。具体步骤如下:
1. 创建一个OAuth2拦截器
```java
@Component
public class OAuth2FeignRequestInterceptor implements RequestInterceptor {
private final OAuth2AuthorizedClientService clientService;
public OAuth2FeignRequestInterceptor(OAuth2AuthorizedClientService clientService) {
this.clientService = clientService;
}
@Override
public void apply(RequestTemplate template) {
OAuth2AuthenticationToken authentication = (OAuth2AuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.isAuthenticated()) {
OAuth2AuthorizedClient client = clientService.loadAuthorizedClient(
authentication.getAuthorizedClientRegistrationId(), authentication.getName());
template.header("Authorization", "Bearer " + client.getAccessToken().getTokenValue());
}
}
}
```
2. 在Feign客户端上启用OAuth2拦截器
```java
@FeignClient(name = "example-service", configuration = OAuth2FeignClientConfiguration.class)
public interface ExampleClient {
@GetMapping("/example")
String getExample();
}
@Configuration
@EnableFeignClients(clients = ExampleClient.class)
public class FeignConfiguration {
@Autowired
private OAuth2AuthorizedClientService clientService;
@Bean
public OAuth2FeignRequestInterceptor oAuth2FeignRequestInterceptor() {
return new OAuth2FeignRequestInterceptor(clientService);
}
}
@Configuration
public class OAuth2FeignClientConfiguration {
@Autowired
private OAuth2FeignRequestInterceptor oAuth2FeignRequestInterceptor;
@Bean
public RequestInterceptor requestInterceptor() {
return oAuth2FeignRequestInterceptor;
}
}
```
在上面的配置中,我们创建了一个名为OAuth2FeignRequestInterceptor的拦截器,它将在每个请求中传递OAuth2令牌。然后,在Feign客户端上启用此拦截器,以确保令牌被正确传递。
希望这个解决方案能够帮助解决你的问题。
阅读全文