spring+javaWeb框架处理请求跨域的问题

  1. 添加CorsFilterConfig实现Filter接口

@Order(1)
@Configuration
public class CorsFilterConfig implements Filter{

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;

// 打印初始响应头
System.out.println("Before setting headers: " + httpResponse.getHeaderNames());

// 允许的源列表
List allowedOrigins = Arrays.asList(
"http://localhost:8000",
"http://xx.xxx.xx.xxx:8000"
);

// 获取请求中的 Origin
String originHeader = httpRequest.getHeader("Origin");

// 检查请求的 Origin 是否在允许的列表中
if (originHeader != null && allowedOrigins.contains(originHeader)) {
httpResponse.setHeader("Access-Control-Allow-Origin", originHeader);
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
}

// 设置 CORS 响应头
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
httpResponse.setHeader("Access-Control-Allow-Headers", "*");
httpResponse.setHeader("Access-Control-Max-Age", "3600");

// 打印最终响应头
System.out.println("After setting headers: " + httpResponse.getHeaderNames());

if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) {
httpResponse.setStatus(HttpServletResponse.SC_OK);
return;
}

chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CorsFilter initialized");
}

@Override
public void destroy() {
System.out.println("CorsFilter destroyed");
}

}

2.在web.xml文件中将自定义的 CorsFilterConfig 类作为过滤器启用,并映射到所有请求路径 /*,这表示该过滤器会对所有请求生效。



corsFilter
com.alibaba.aone.blast.webapp.config.CorsFilterConfig


corsFilter
/*

posted @ 2025-04-29 14:10  小小程序猿、  阅读(54)  评论(0)    收藏  举报