📜  spring cors - Java (1)

📅  最后修改于: 2023-12-03 14:47:33.410000             🧑  作者: Mango

Spring CORS

介绍

Spring CORS(跨来源资源共享)是一个Spring Framework中的功能,用于处理跨域资源共享问题。跨域资源共享是指在浏览器中,一个源(域)的网页向另一个源(域)的服务器发送请求,从而实现跨域通信。在默认情况下,浏览器会阻止此类跨域请求,因为这可能引发安全风险。

Spring CORS提供了一种方式来配置跨域请求的规则,以允许特定的源发出跨域请求。通过使用Spring CORS,您可以在Spring应用程序中配置允许的源、允许的HTTP方法、允许的请求头等。

配置

要启用Spring CORS功能,您需要完成以下步骤:

  1. 在Spring配置文件中添加@EnableWebMvc注解,以启用Spring MVC框架。
  2. 创建一个实现WebMvcConfigurer接口的配置类,并覆盖addCorsMappings方法。在该方法中,您可以配置允许的源、允许的HTTP方法、允许的请求头等。

下面是一个示例配置类的代码片段:

@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {

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

在上面的代码中,我们配置了允许的源为http://example.com,允许的HTTP方法为GET、POST、PUT和DELETE,允许的请求头为Authorization和Content-Type。我们还设置了允许携带凭证(如cookie、HTTP认证等),并设置了响应中可暴露的自定义头Custom-Header。最后,我们还设置了CORS预检请求的最大缓存时间为3600秒。

应用程序示例

假设我们有一个Spring RESTful API,它提供了一些用于访问资源的端点。我们希望允许http://example.com这个域的网页从API端点发送请求。

首先,我们创建一个简单的Spring MVC控制器类,如下所示:

@RestController
public class ApiController {

    @GetMapping("/api/users")
    public List<User> getUsers() {
        // 返回用户列表
    }

    @PostMapping("/api/users")
    public void createUser(@RequestBody User user) {
        // 创建新用户
    }
}

然后,我们需要将之前的CorsConfig类添加到我们的Spring应用程序中。您可以通过将其作为一个bean添加到主配置类中,或者在扫描的包中进行组件扫描来实现。

现在,当http://example.com的网页向/api/users发送GET或POST请求时,它们将被允许通过浏览器的CORS策略。

结论

Spring CORS是一个强大的功能,用于处理跨域资源共享问题。通过配置允许的源、允许的HTTP方法和请求头,您可以控制允许跨域通信的规则。

以上是关于Spring CORS的简介及配置示例,希望对您有所帮助。

参考文档:Spring CORS