【发布时间】:2018-07-27 05:32:11
【问题描述】:
我正在尝试定义 origins 允许执行 REST 服务。我正在研究 Java(1.8)、SpringBoot (1.5.9)。我尝试通过 2 种方式实现 CORS:
@CrossOrigin(origins = "http://localhost:8080")
@RequestMapping(value="/questions")
public String readCSV() throws IOException, URISyntaxException {
/** Some Logic **/
return str;
}
或
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
String origins = "http://localhost:8080";
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET", "PUT", "POST")
.allowedOrigins(origins)
.maxAge(3600);
super.addCorsMappings(registry);
}
}
以上两种情况都有效。但我想将 http://localhost:8080 更改为一些有意义的正则表达式,它将与某些特定的域名匹配,但子域名称和端口号可能会有所不同。
例如,假设 想要的域名 是 innovation.com 而少数接受的网址 会是 we.innovation.com:8081 、my.innovation.com:8090 等
问题是,每当我放置一些正则表达式而不是静态 URL 时,它都会引发 CORS 错误并且不允许访问该服务。即使在我使用允许任何有效 url 的正则表达式的情况下,它也会阻止 localhost:8080。
我试过像这样的正则表达式:^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+innovation.com(:\d{2,4})^https?://(?:[^./@]+\.)*domain\.com(?![^/])^(http[s]:\/\/)?([A-Za-z0-9-]{1,63}\\.)+innovation.com(:\d{2,4})
【问题讨论】:
-
您为什么认为这是可能的?你有任何链接表明这是可能的吗?
-
感谢@dur 的快速回复。正是我的问题。这甚至可能吗?
-
似乎没有内置方法可以做到这一点,这也让我抓狂。作为已知数量组合的解决方法,“origins”可以是逗号分隔的值列表,例如“example.com:8080,secure.example.com:8081”。
标签: regex spring-boot spring-security cors cross-domain