一、什么是跨域
跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。
二、被调用方解决方案
被调用方使用的是 Spring Boot + Mybatis
直接新建一个 CorsFilter 类,代码如下:
@Component @WebFilter(urlPatterns = "/*", filterName = "oneFilter") //这里的“/*” 表示的是需要拦截的请求路径 public class CorsFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; httpResponse.setHeader("Access-Control-Allow-Origin", "*"); // 允许跨域的地址为所有 httpResponse.addHeader("Access-Control-Max-Age","3600"); // 非简单请求,只要第一次通过OPTIONS检查 在1小时之内不会在调用OPTIONS进行检测 httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); // 带有Cookie的跨域请求,此值必须设置为true。 filterChain.doFilter(servletRequest, httpResponse); } @Override public void destroy() { } }
这里过滤了所有的请求地址
昨天这样写好之后,我在这个方法里打了个断点,然后debug 发现进不去,我还以为是配置的不对呐,没想到还是以前的那个问题,就是我用的是 jsp ,项目启动的时候用的是插件启动,然后我项目里面又有热部署,结果debug失效!