0


【笑小枫的SpringBoot系列】【十】SpringBoot处理请求跨域问题

上一篇【笑小枫的SpringBoot系列】【九】SpringBoot用户登录拦截器刚刚说过使用拦截器对用户登录状态进行拦截,本文就顺便说说使用拦截器处理跨域问题吧。

我们本系列应该不会遇到跨域问题,但日常工作中,一个新项目和前端小伙伴联调时还是要处理跨域问题的,本文就一起简单的看一下,以后遇到了跨域问题也可以快速解决。

什么是跨域

CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。

跨域指的是由于浏览器的安全性限制,不允许前端页面访问协议不同、域名不同、端口号不同的http接口,例如我本地创建一个html,里面写一个ajax请求访问我服务器SpringBoot应用提供的接口:

192.168.1.11:8080/getUser

则会出报

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

错误。

SpringBoot怎么解决跨域

在springboot中可以采用多种方式解决跨域问题,例如:可以在类或方法上添加

@CrossOrigin

注解。还有一种就是全局配置,全局配置需要添加自定义类实现

WebMvcConfigurer

接口,然后实现接口中的

addCorsMappings

方法。

  • addMapping:表示对哪种格式的请求路径进行跨域处理。
  • allowedHeaders:表示允许的请求头,默认允许所有的请求头信息。
  • allowedMethods:表示允许的请求方法,默认是 GET、POST 和 HEAD。这里配置为 * 表示支持所有的请求方法。
  • maxAge:表示探测请求的有效期
  • allowedOrigins 表示支持的域

详细代码如下👇👇

packagecom.maple.demo.filter;importorg.springframework.core.annotation.Order;importorg.springframework.http.HttpHeaders;importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;/**
 * 跨域拦截.
 *
 * @author 笑小枫
 * @date 2022-07-21 19:23:08
 * @since JDK 1.8
 */@WebFilter(filterName ="corsFilter", urlPatterns ="/*")@Order(0)publicclassCorsFilterimplementsFilter{privatestaticfinalString HEADER_ORIGIN ="Origin";privatestaticfinalString METHOD_OPTIONS ="OPTIONS";@OverridepublicvoiddoFilter(ServletRequest req,ServletResponse res,FilterChain chain)throwsIOException,ServletException{finalHttpServletRequest request =(HttpServletRequest) req;finalHttpServletResponse response =(HttpServletResponse) res;if(request.getHeader(HEADER_ORIGIN)!=null){
            response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, request.getHeader(HEADER_ORIGIN));}

        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS,"true");// 如果允许所有请求方式,用*
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS,"GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE÷,"3600");// 如果允许所有header,用*
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,"Authorization, Content-Type, Accept, X-Requested-With, remember-me");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS,"Content-Disposition");if(METHOD_OPTIONS.equalsIgnoreCase(request.getMethod())){
            response.setStatus(HttpServletResponse.SC_OK);return;}
        chain.doFilter(req, res);}}

关于笑小枫💕

本章到这里结束了,喜欢的朋友关注一下我呦😘😘,大伙的支持,就是我坚持写下去的动力。
老规矩,懂了就点赞收藏;不懂就问,日常在线,我会就会回复哈~🤪
微信公众号:笑小枫
笑小枫个人博客:https://www.xiaoxiaofeng.com
本文源码:https://github.com/hack-feng/maple-demo


本文转载自: https://blog.csdn.net/qq_34988304/article/details/127708974
版权归原作者 笑小枫 所有, 如有侵权,请联系我们删除。

“【笑小枫的SpringBoot系列】【十】SpringBoot处理请求跨域问题”的评论:

还没有评论