【问题标题】:Specifying @CrossOrigin orgins via an environment variable通过环境变量指定 @CrossOrigin 来源
【发布时间】:2018-02-08 23:28:06
【问题描述】:

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

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

作为后续问题。我可以将端口设置为通配符吗?这样任何 localhost 网络服务器都可以访问 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]+

我可能需要单独提出这个问题。

【问题讨论】:

    标签: java spring cors environment-variables spring-annotations


    【解决方案1】:

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

    如果你正在使用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 过滤器。

    【讨论】:

    • 我不会使用基于 xml 的配置。我还需要模式匹配以允许所有 localhost 端口,因此如果我理解正确,我将不得不使用 CORS 过滤器。
    • 您使用的是基于 Java 的配置吗?
    • 是的,我是。 - spring.io/blog/2015/06/08/… 是我的工作方式。
    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 2017-10-10
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多