增加网关跨域处理

This commit is contained in:
2025-07-05 01:26:54 +08:00
parent 4c8ca06037
commit 98de34a692
9 changed files with 417 additions and 0 deletions

View File

@ -0,0 +1,11 @@
package com.sczx.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}

View File

@ -0,0 +1,35 @@
package com.sczx.gateway.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
@Slf4j
public class AuthGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String path = exchange.getRequest().getPath().value();
log.info("🌐 请求路径: {}", path);
// 示例:拦截所有请求,校验 token
// String token = exchange.getRequest().getHeaders().getFirst("Authorization");
// if (token == null || !token.startsWith("Bearer ")) {
// exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
// return exchange.getResponse().setComplete();
// }
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0; // 执行顺序
}
}

View File

@ -0,0 +1,34 @@
package com.sczx.gateway.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Configuration
public class CorsGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
HttpHeaders headers = exchange.getRequest().getHeaders();
// 判断是否为跨域请求
if (headers.containsKey("Origin")) {
HttpHeaders responseHeaders = exchange.getResponse().getHeaders();
responseHeaders.add("Access-Control-Allow-Origin", "*");
responseHeaders.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
responseHeaders.add("Access-Control-Allow-Headers", "*");
responseHeaders.add("Access-Control-Allow-Credentials", "true");
responseHeaders.add("Access-Control-Max-Age", "3600");
responseHeaders.add("Access-Control-Expose-Headers", "*");
}
// 如果是 OPTIONS 预检请求,直接返回 200
if ("OPTIONS".equalsIgnoreCase(exchange.getRequest().getMethodValue())) {
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
}