今天遇到奇怪的两个系统交互跨域问题,现象如下:
通过ajax+post请求后台数据,状态码200是成功的,方法是OPTIONS,参数里没有我提交的参数和值。这很显然不正常
正确的提交方法应该是post才对,通过在配置文件web.xml添加过滤器完美解决,直接上代码
在编码过滤器encodingFilter前面添加
<filter>
<filter-name>SimpleCORSFilter</filter-name>
<filter-class>com.zvt.servlet.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SimpleCORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
跨域过滤器类的代码也贴上:
package com.zvt.servlet;
import java.io.IOException;
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;
public class SimpleCORSFilter implements Filter {
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.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.setHeader("Access-Control-Max-Age", "3600");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}