📜  带有 Spring Boot 的 CORS (1)

📅  最后修改于: 2023-12-03 15:25:26.749000             🧑  作者: Mango

带有 Spring Boot 的 CORS

CORS(跨源资源共享)是 Web 应用程序中常见的安全性措施,它允许一个域名的 Web 应用程序向另一个域名的应用程序发出 AJAX 请求。Spring Boot 支持 CORS,让我们可以开发更加灵活的 Web 应用程序。

什么是 CORS?

CORS 的全称是跨源资源共享,是一种机制,它允许网页从不同的源访问同一个 API 接口。通俗点说,就是浏览器允许通过 AJAX 请求调用其他源的服务器接口。CORS 机制通过 HTTP 头来告诉浏览器哪些情况下允许跨域访问。

Spring Boot 如何支持 CORS?

Spring Boot 提供了一种简单的方式来支持 CORS。我们可以使用 @CrossOrigin 注解来实现。@CrossOrigin 可以被用来标识单个处理器方法,或者被用来标识整个控制器。

在使用 @CrossOrigin 注解时,需要指定允许的源、请求方法等等一些参数。

下面是一个使用 @CrossOrigin 的示例:

@RestController
@RequestMapping("/api")
public class UserController {

    @CrossOrigin(origins = "http://localhost:8080")
    @PostMapping("/users")
    public ResponseEntity createUser(@RequestBody User user) {
        // 创建用户
        return ResponseEntity.ok().build();
    }
}

在这个示例中,我们使用 @CrossOrigin 注解来标识 createUser 方法,它允许来自 http://localhost:8080 域的请求。如果请求不是来自这个域,将返回 403 状态码。

如果您想要允许所有的域名调用此 API,可以将 origins 参数设置为 "*",如下所示:

@RestController
@RequestMapping("/api")
public class UserController {

    @CrossOrigin(origins = "*")
    @PostMapping("/users")
    public ResponseEntity createUser(@RequestBody User user) {
        // 创建用户
        return ResponseEntity.ok().build();
    }
}

此时,所有的域名均可请求 createUser 方法。

配置全局 CORS

如果您需要跨多个控制器支持 CORS,可以在配置类中添加 addCorsMappings 方法。addCorsMappings 方法接受一个 CorsRegistry 参数,您可以使用它来配置您的 CORS 策略。下面是一个示例:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedMethods("PUT", "DELETE", "GET")
                .allowedOrigins("*")
                .allowedHeaders("*");
    }
}

在这个示例中,我们启用了 /api/** 路径下的跨域请求,并允许 PUT、DELETE 和 GET 请求方法。allowedOrigins 和 allowedHeaders 分别指定了允许的源和请求首部。如果使用 allowedMethods("*"),则允许所有方法访问。

以上是带有 Spring Boot 的 CORS 的介绍。希望这篇文章能够帮助您更好的理解 CORS。