Spring boot 入门教程-CORS 跨域支持

CORS(Cross-Origin Resource Sharing)”跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制。我们在开发中都会遇到前端请求后台服务器出现跨域错误,下面就讲一下如何让SpringBoot项目支持CORS跨域。

第一步 搭建SpringBoot项目,Spring 4.2提供了@CrossOrigion注解实现CORS的支持。

怎么搭建一个SpringBoot项目及添加相关依赖,我在这里就不细说了,相信对各位来说都是小菜。

第二步 配置CORSConfiguration,全局跨域设置。

新建一个类CORSConfiguration,继承WebMvcConfigurerAdapter,并重写addCorsMappings方法。

@Configuration
public class CORSConfiguration extends WebMvcConfigurerAdapter{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*")
                .allowedOrigins("*")
                .allowedHeaders("*");
        super.addCorsMappings(registry);
    }
}

配置的详细信息说明如下: 
addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。 
allowedMethods:允许所有的请求方法访问该跨域资源服务器,如:POST、GET、PUT、DELETE等。 
allowedOrigins:允许所有的请求域名访问我们的跨域资源,可以固定单条或者多条内容,如:”http://www.aaa.com“,只有该域名可以访问我们的跨域资源。 
allowedHeaders:允许所有的请求header访问,可以自定义设置任意请求头信息。

举例:

1.允许域名访问

@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://localhost:63342");//允许域名访问,如果*,代表所有域名
            }
        };
    }
}

2.只允许header中带Authorization或者Token的请求访问

@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedHeaders("Authorization", "Token")//允许的头信息
                        .allowedOrigins("http://localhost:63342");
            }
        };
    }
}

3.只支持post方式访问

@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedHeaders("Authorization", "Token")
                        .allowedMethods("POST")//只允许post方式
                        .allowedOrigins("http://localhost:63342");
            }
        };
    }
}

局部跨域设置

上面是配置了全局的跨域访问,也可以配置局部访问控制

类上面注解@CrossOrigin

@CrossOrigin(origins = "http://domain.com", allowedHeaders = "token", methods = {RequestMethod.GET, RequestMethod.POST})
@RestController
public class TestResource{

}

方法上面的@CrossOrigin

@RestController
public class TestResource{
    @CrossOrigin(origins = "http://domain.com", allowedHeaders = {"header1", "header2"})
    @GetMapping("/api/test")
    public String test(){
        return "test";
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27828675/article/details/90175379