2017-08-31 98 views
3

是否可以通过环境变量指定@CrossOrigin注释的开始点?我想这样做,以便我可以使用相同的代码库进行uat/staging/production。我希望我的uat/staging环境可以通过localhost进行测试,但我的生产环境只接受来自特定端点的请求。通过环境变量指定@CrossOrigin开始点

例如,这是我们用于新API的跨源注释用户;

@CrossOrigin(origins = {"http://localhost:9000", "http://example.com"}) 

这工作正常。在我的本地机器上进行测试,只有在端口9000上运行的网络服务器才能访问我的API。然后,我尝试设置我的本地Windows计算机

ALLOWED_ORIGINS = http://localhost:9000,http://example.com 

在我的环境变量,然后,我改变了注解太

@CrossOrigin(origins = "#{'${allowed.origins}'.split(',')}") 

而现在的请求被阻塞,由于CORS。

作为后续问题。我可以将端口设置为通配符吗?这样任何本地主机web服务器都可以访问API?

UPDATE

所以我能够实现我的问题通过的第一部分 - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support

和我的生活设置环境变量为allowedOrigins()

@Value("#{'${allowed.origins}'.split(',')}") 
private List<String> allowedOrigins; 

然而我似乎无法获得任何形式的通配符/模式匹配工作。我已经尝试了以下两个环境变量:我可能不得不提出这是一个单独的问题

回答

1

其实否,注释仅在编译时处理。 您无法处理或提供动态数据。 配置数据必须是固定的或不变的。

如果您正在使用xml来配置弹簧。你可以使用下面的代码来配置spring。

<mvc:cors> 

    <mvc:mapping path="/api/**" 
     allowed-origins="http://domain1.com, http://domain2.com" 
     allowed-methods="GET, PUT" 
     allowed-headers="header1, header2, header3" 
     exposed-headers="header1, header2" allow-credentials="false" 
     max-age="123" /> 

    <mvc:mapping path="/resources/**" 
     allowed-origins="http://domain1.com" /> 

</mvc:cors> 

来源link

它您需要任何进一步的配置,您必须提供自己的CORS处理过滤器,然后,只需更换过滤器链中的CORS过滤器。

+0

我不会使用基于xml的配置。我还需要模式匹配来允许所有本地主机端口,所以看起来像我必须使用CORS过滤器,如果我正确理解事情。 – Jags

+0

您是否使用基于Java的配置? – Paras

+0

是的,我。 - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support是我如何运作的。 – Jags