编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

SpringBoot入门-解决跨域问题(springboot2.4跨域)

wxchong 2024-08-05 02:05:30 开源技术 18 ℃ 0 评论

跨域是浏览器的安全策略,浏览器的ajax请求只支持同域名的访问,但是现在普遍都是前后端分离的开发方式,前端域名和后台域名往往不一致,这时就需要后台在响应头里面加个允许跨域的字段。


如果在每个controller里面加这个响应头会非常繁琐,所以需要用到过滤器,处理所有请求。


这里需要注意一下的是chrome遇到跨域请求时会发送一个option请求,如果这个option请求正常返回才会发送正常请求,遇到这个option请求需要处理下,不然接口会被调用两次


@WebFilter(filterName = "simpleCORSFilter", urlPatterns = "/*")
@Component
public class SimpleCrossFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) 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", "*");

        // 如果是OPTIONS则结束请求
        if (req instanceof HttpServletRequest) {
            HttpServletRequest request = (HttpServletRequest) req;
            if (HttpMethod.OPTIONS.toString().equalsIgnoreCase(request.getMethod())) {
                response.setStatus(HttpStatus.OK.value());
                return;
            }
        }
        filterChain.doFilter(req, res);
    }

    @Override
    public void destroy() {

    }
}



发送一个请求,可以看到响应头里面已经加上了允许跨域的字段


?


参考项目(模块: SpringBoot-HelloWorld): https://gitee.com/huatin/java-test

?

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表