Spring Boot 使用Filter过滤器解决跨域问题

一、什么是跨域

跨域是指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失效!

发布了118 篇原创文章 · 获赞 20 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhang33565417/article/details/103148143