tomcatservlet接收vue请求被拦截
时间: 2025-06-15 10:27:42 浏览: 14
### 解决Tomcat Servlet 接收 Vue 请求时出现的跨域或 CORS 问题
当 Tomcat 应用程序作为后端服务运行并与前端 Vue.js 单页应用交互时,可能会遇到由于浏览器的安全机制——即同源策略引起的跨域资源共享(CORS)问题[^2]。
#### 使用 Filter 实现 CORS 支持
一种常见的解决方案是在 Java Web 应用中通过创建并配置 `Filter` 来处理所有的 HTTP 请求,在响应头中添加必要的 CORS 相关字段。下面是一个简单的例子:
```java
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
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");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {}
}
```
此代码片段展示了如何定义一个名为 `CorsFilter` 的类来实现 `javax.servlet.Filter` 接口,并重写其三个主要的方法:初始化(`init`)、执行过滤逻辑(`doFilter`)以及销毁资源(`destroy`)。在这个过程中设置了几个重要的响应头部信息用于支持跨域请求[^1]。
为了使这个过滤器生效,还需要将其注册到 web 配置文件(web.xml 或者 Spring Boot 中的应用属性文件),以便它可以应用于整个应用程序中的所有 URL 映射上。
对于基于 Spring Framework 构建的应用来说,也可以考虑利用框架自带的功能简化这一过程,比如使用 `@CrossOrigin` 注解标记控制器方法或是全局启用 CORS 支持等特性[^5]。
另外值得注意的是,如果修改了 Tomcat 默认使用的端口号,则应确保新的端口不会与其他正在运行的服务冲突;同时也要相应调整前端项目的 API 基础路径设置以匹配更新后的服务器地址。
阅读全文
相关推荐


















