代码如下:
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.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
@WebFilter(filterName="contextfilter",urlPatterns="/*")
public class CrossFilter 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, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type, Accept, Origin");
response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
注意点(仅个人所遇到的问题处理方法,只为记录):
1.前端如果用的vue.js,访问地址的ip需要删除,因为前后台联调需要加上ip地址,上线不能有硬编码。如:联调时访问地址为:"http://129.2.2.2:8080/XXXX" 上线测试就需要改为"/XXXX".
2.加了filter过滤器后,前台怎么都无法跨域访问。查询大量资料都解决不了。后来公司大牛发现ping不通我的ip地址,才发现防火墙没关。关闭后完美解决跨域问题。