You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前端Ajax请求Tomcat10部署的Jersey接口出现CORS跨域错误如何解决

解决Jersey+Tomcat10环境下的CORS跨域错误方案

你的问题是前端服务端口(8083)和后端服务端口(8085)不符合浏览器同源策略要求,所以被CORS规则拦截了,按照以下任意一种方案配置即可解决:

方案1:Tomcat项目级CORS过滤器配置(无需修改业务代码,优先推荐)

直接在你的web.xml中添加以下过滤器配置,放在原有servlet配置之前即可:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <!-- 允许的前端源,开发阶段可以写*,生产环境替换为实际前端域名 -->
        <param-value>http://localhost:8083</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,PUT,DELETE,OPTIONS,HEAD</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <!-- 如果需要传递Cookie等凭证设为true,此时allowed.origins不能用* -->
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>1800</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

配置完重启Tomcat即可生效。

方案2:Jersey服务端自定义CORS配置

如果不想修改Tomcat相关的过滤器配置,可以通过Jersey的扩展机制实现:

  • 第一步:新建CORS过滤器类,放在com.demoRest包下即可被Jersey自动扫描加载:
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
import java.io.IOException;

@Provider
public class CorsFilter implements ContainerResponseFilter {
    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:8083");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "Content-Type, X-Requested-With");
        // 处理OPTIONS预检请求
        if ("OPTIONS".equals(requestContext.getMethod())) {
            responseContext.setStatus(200);
        }
    }
}
  • 第二步:重启后端服务即可生效。

注意事项

  • 生产环境不要直接配置*作为允许的源,要明确指定前端实际的访问域名,避免安全风险
  • 如果配置了允许携带凭证(比如需要传递Cookie),允许的源不能使用*,必须填写具体的源地址

内容的提问来源于stack exchange,提问作者It's Siddiqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:15:02