springboot网关添加跨域
时间: 2023-06-29 15:06:55 浏览: 95
要在Spring Boot网关中添加跨域支持,可以使用Spring Web的CorsConfiguration类和CorsFilter过滤器。
以下是一个简单的示例:
1. 创建一个CorsConfiguration实例并进行相应的设置:
```
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
```
这里我们允许所有来源、所有头部、所有请求方法,并开启了凭证支持。
2. 创建一个CorsFilter实例并将上面的CorsConfiguration设置添加到过滤器中:
```
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
```
这里我们创建了一个基于URL的CorsConfigurationSource,并将其应用于所有路径("/**")。
3. 最后,将CorsFilter添加到Spring Boot网关中即可:
```
@Component
public class CustomGatewayFilter implements GatewayFilter {
@Autowired
private CorsFilter corsFilter;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
ServerHttpResponse response = exchange.getResponse();
if (headers.containsKey(HttpHeaders.ORIGIN)) {
corsFilter.doFilter(request, response, new FilterChain() {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException {
chain.filter(exchange);
}
});
} else {
return chain.filter(exchange);
}
return Mono.empty();
}
}
```
这里我们将CorsFilter注入到自定义的GatewayFilter中,并在filter方法中判断请求头是否包含Origin,如果包含则调用CorsFilter,否则直接调用后续的过滤器链。
以上就是在Spring Boot网关中添加跨域支持的简单示例。
阅读全文