Spring Boot——跨域CORS

Spring Boot跨域CORS简介

  • Spring Boot跨域
    • 常见解决方案
      • 什么是CORS?
      • 配置CORS
      • 使用CORS

Spring Boot跨域

当使用Spring Boot开发Web应用程序时,有时需要处理跨域请求。跨域请求是指在浏览器中,使用JavaScript从一个域(或者端口、协议)向另一个域(或者端口、协议)发起请求。默认情况下,浏览器会限制跨域请求,以确保安全性。

常见解决方案

Spring Boot提供了一种简单的方式来解决跨域问题,通过配置跨域资源共享(CORS)支持

什么是CORS?

CORS(Cross-Origin Resource Sharing)是一种用于解决跨域访问的机制。当在浏览器中执行跨域请求时,浏览器会使用CORS来判断是否允许该请求跨域访问。

配置CORS

创建一个配置类,并使用@Configuration注解标记。在该类上使用@Bean注解,创建一个WebMvcConfigurer类型的Bean,并覆盖addCorsMappings方法。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

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

在上述配置中,我们使用addMapping方法指定允许跨域的URL路径。通常,使用/**表示匹配所有路径。allowedOrigins方法定义允许的源(域名),使用*表示允许所有源。allowedMethods定义允许的HTTP方法,allowedHeaders定义允许的请求头,allowCredentials定义是否允许发送认证信息,maxAge定义预检请求的有效期。

也可以通过配置文件进行配置

application.properties:

spring.mvc.cors.allowed-origins=http://example.com
spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.allow-credentials=true
spring.mvc.cors.max-age=3600

application.yml:

spring:
  mvc:
    cors:
      allowed-origins: http://example.com
      allowed-methods: GET,POST,PUT,DELETE
      allowed-headers: *
      allow-credentials: true
      max-age: 3600

使用CORS

使用注解方式:在需要跨域支持的Controller类或方法上添加@CrossOrigin注解。例如:

@RestController
public class MyController {

    @GetMapping("/example")
    @CrossOrigin(origins = "http://example.com")
    public String example() {
        // 处理请求的方法
    }
}

使用配置类方式:创建一个配置类,继承自WebMvcConfigurer接口,并重写addCorsMappings方法。例如:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/example")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

如果想要同时允许多个地址通过跨域

注解:

@RestController
public class MyController {

    @GetMapping("/example")
    @CrossOrigin(origins = {"http://example1.com", "http://example2.com"})
    public String example() {
        // 处理请求的方法
    }
}

配置类:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/example")
                .allowedOrigins("http://example1.com", "http://example2.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

你可能感兴趣的:(SpringBoot,spring,boot,java,spring)