java - 通过环境变量指定@CrossOrigin 来源

标签 java spring cors environment-variables spring-annotations

是否可以通过环境变量为 @CrossOrigin 注释指定来源?我想这样做,以便我可以将相同的代码库用于 uat/staging/production。我希望我的 uat/staging 环境可以通过本地主机访问以进行测试,但我的生产环境只接受来自一个特定端点的请求。

例如,这是我们新 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 而被阻止。

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

更新

所以我能够通过 - 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;

然而,对于我来说,我似乎无法使用任何形式的通配符/模式匹配。我已经尝试了以下两个作为环境变量;

http://localhost:*
http:\/\/localhost:[0-9]+

我可能不得不将此作为一个单独的问题提出。

最佳答案

实际上没有,注解只在编译时处理。 您无法处理或提供动态数据。 配置数据必须是固定的或恒定的。

如果您正在使用 xml 配置 spring。您可以使用以下代码配置 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 过滤器即可。

关于java - 通过环境变量指定@CrossOrigin 来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974133/

相关文章:

java - Hibernate 没有在 Spring Boot 项目中抛出 LazyInitializationException

java - 在GKE集群中运行的Java应用程序如何以编程方式应用yaml文件?

java - 如何在Spring中使用WebLogic提供的JNDI DataSource?

java - 为什么我的springMVC无法从前端页面获取模型?

c# - 如何设置 ASP.NET CORS 选项以允许 application/json

javascript - htaccess 中的访问控制允许来源

java - 使用PreparedStatement setNull

java - Bytebuddy 按名称匹配子类型

spring - eclipse 将 web.xml 错误地加载到 tomcat

angularjs - 为 Socket.IO 设置 COR header