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
相关产品推荐
相关产品推荐

