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

Tomcat 8 基于web.xml配置自定义CORS过滤器的疑问

在Tomcat 8中配置自定义CORS过滤器的完整指南

一、完善你的SimpleCORSFilter Java文件

你提供的代码其实缺了几个关键部分——Filter接口要求必须实现init()、doFilter()和destroy()三个方法,还需要包声明和必要的导入。我帮你补全了完整可运行的代码:

// 先声明包路径,你可以根据自己的项目结构修改,比如改成com.yourproject.filters
package com.yourcompany.filters;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SimpleCORSFilter implements Filter {

    // Filter初始化方法,不需要额外逻辑的话留空即可
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 若需要初始化资源(比如读取配置),可以在这里添加逻辑
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        // 这里可以根据业务需求添加更多允许的请求头,比如Content-Type、Authorization等
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type, Authorization");
        
        // 放行请求到下一个过滤器或目标Servlet
        chain.doFilter(req, res);
    }

    // Filter销毁方法,不需要额外逻辑的话留空即可
    @Override
    public void destroy() {
        // 若需要释放资源,可以在这里添加逻辑
    }
}

二、Java文件的存放目录

源文件(.java)位置

如果是标准Web项目结构,源文件要放在项目的src/main/java目录下,对应你声明的包路径:
比如包名是com.yourcompany.filters,源文件路径就是:src/main/java/com/yourcompany/filters/SimpleCORSFilter.java

编译后的class文件位置

编译完成后,生成的.class文件必须放到Tomcat项目的WEB-INF/classes目录下,对应包路径:
WEB-INF/classes/com/yourcompany/filters/SimpleCORSFilter.class

如果用Maven/Gradle这类构建工具,它们会自动帮你把编译后的class文件放到正确位置;如果是手动部署,需要自己编译.java成.class后按这个目录结构放置。

三、在web.xml中配置调用过滤器

打开项目的WEB-INF/web.xml文件,添加以下内容注册并映射过滤器:

<!-- 注册自定义CORS过滤器 -->
<filter>
    <!-- 过滤器名称,自定义即可,要和下面的filter-mapping保持一致 -->
    <filter-name>SimpleCORSFilter</filter-name>
    <!-- 过滤器的完整类名(包名+类名),必须和Java文件的包名、类名完全匹配 -->
    <filter-class>com.yourcompany.filters.SimpleCORSFilter</filter-class>
</filter>

<!-- 映射过滤器,指定哪些请求需要经过这个过滤器 -->
<filter-mapping>
    <filter-name>SimpleCORSFilter</filter-name>
    <!-- 这里指定过滤所有请求,用/*;也可以根据需求指定特定路径,比如/api/* -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

四、验证配置是否生效

把项目部署到Tomcat 8后,发起跨域请求,检查响应头里是否包含你设置的Access-Control-Allow-Origin等CORS相关字段,如果存在就说明配置成功了。

内容的提问来源于stack exchange,提问作者Ridho Dwi Dharmawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:55:41