当前位置 博文首页 > blackball1998的博客:解决跨域问题

    blackball1998的博客:解决跨域问题

    作者:[db:作者] 时间:2021-06-09 09:17

    解决跨域问题

    有时候我们通过浏览器发送请求时,会碰到这样一个错误

    been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource

    在这里插入图片描述

    这是浏览器为了安全禁止非同源访问引起的跨域问题,跨域问题可以通过部署Nginx解决,也可以通过修改Spring MVC的配置解决

    @CrossOrigin注解

    我们可以将@CrossOrigin注解添加在Controller类上,这样Controller类下的所有接口就都实现跨域了

    @RestController
    @CrossOrigin
    public class MyController {
    }
    

    @CrossOrigin注解也可以添加在请求处理方法上,这样只对这个接口开启跨域功能

    如果所有的Controller类下的接口都需要跨域,可以创建一个BaseController,在BaseController上添加@CrossOrigin,然后所有的Controller都继承BaseController

    修改web配置

    我们也可以通过修改web配置来解决跨域问题,重写WebMvcConfigurer接口的addCorsMappings方法即可

    @Configuration
    public class MyWebConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOriginPatterns("*")
                    .allowedHeaders("*")
                    .allowedMethods("GET", "POST", "DELETE", "PUT")
                    .allowCredentials(true)
                    .maxAge(3600);
        }
    }
    

    配置中每个方法的作用如下

    • addMapping方法绑定需要跨域的请求,使用通配符/**绑定所有请求
    • allowedOriginPatterns绑定请求时Origins的具体值,使用通配符*接受任意域名请求
    • allowedHeaders绑定请求头信息,使用通配符*接受任意字段
    • allowedMethods绑定服务器支持的所有跨域请求方法,使用通配符*接受任意请求类型
    • allowCredentials表示是否允许发送Cookie,默认不发送
    • maxAge表示本次预检请求的有限期,单位秒
    下一篇:没有了