代码如下:
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地址,才发现防火墙没关。关闭后完美解决跨域问题。
