带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域

Posted

技术标签:

【中文标题】带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域【英文标题】:CORS with Spring Boot - restrict GET requests to certain domains 【发布时间】:2019-04-17 22:10:53 【问题描述】:

我正在使用 Spring Boot,并且希望仅限制来自某些域的 HTTP GET 请求。例如,我想只接受来自预定义域列表的请求(例如https://www.frontend.com、https://www.test-frontend.com)。我怎样才能实现这样的功能?

我预计会遇到 CORS 问题,但这些不适用于 GET 请求。有什么想法吗?

【问题讨论】:

您不能使用 CORS 配置来阻止来自非浏览器客户端的请求。请参阅***.com/questions/42708660/… 和***.com/questions/43432743/… 的答案 谢谢,这就是问题所在。 【参考方案1】:
public void addCorsMappings(CorsRegistry registry) 
        registry.addMapping("/api/**")
            .allowedOrigins("https://www.frontend.com", "https://www.test-frontend.com")
            .allowedMethods("GET");
    

参考:https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/cors.html

【讨论】:

【参考方案2】:

首先.allowedMethods 用于允许方法,因此如果您不想允许"GET",则将所有其他方法放入但不要放入 GET 方法,如下所示:

.allowedMethods("PUT", "DELETE", "PATCH")

其次,您不能 CORS by non-webapp 客户端,如 curl 或 Postman,任何非 Web 应用程序客户端。

【讨论】:

我有类似的配置。我使用的是 Postman,这就是问题所在。

以上是关于带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域的主要内容,如果未能解决你的问题,请参考以下文章

WebTestClient - 带有 Spring Boot 和 Webflux 的 CORS

在带有 Angular 的 Spring Boot 中启用了 Cors,但仍然出现 cors 错误

带有 spring-boot 和 angularjs 的 CORS 不起作用

Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller

Spring Boot Security 忽略 cors 配置

带有 Google 的 OAuth2 - CORS 错误(Angular + Spring boot)[重复]