Jag*_*ags 8 java spring environment-variables spring-annotations cors
是否可以@CrossOrigin通过环境变量指定Annotation的来源?我想这样做,以便我可以对 uat/staging/production 使用相同的代码库。我希望我的 uat/staging 环境可以通过 localhost 访问以进行测试,但我的生产环境只接受来自一个特定端点的请求。
例如,这是我们新 API 的跨源注释用户;
@CrossOrigin(origins = {"http://localhost:9000", "http://example.com"})
Run Code Online (Sandbox Code Playgroud)
这工作正常。在我的本地机器上测试,只有在端口 9000 上运行的网络服务器才能访问我的 API。然后我尝试在我的本地 Windows 机器上设置我的环境变量
ALLOWED_ORIGINS = http://localhost:9000,http://example.com
Run Code Online (Sandbox Code Playgroud)
然后我也更改了注释
@CrossOrigin(origins = "#{'${allowed.origins}'.split(',')}")
Run Code Online (Sandbox Code Playgroud)
现在请求由于 CORS 被阻止。
作为后续问题。我可以将端口设置为通配符吗?以便任何本地主机网络服务器都可以访问 API?
更新
所以我能够通过 - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support来实现我问题的第一部分
并设置 env 变量 allowedOrigins()
@Value("#{'${allowed.origins}'.split(',')}")
private List<String> allowedOrigins;
Run Code Online (Sandbox Code Playgroud)
然而,对于我的生活,我似乎无法获得任何形式的通配符/模式匹配。我已经尝试了以下两种环境变量;
http://localhost:*
http:\/\/localhost:[0-9]+
Run Code Online (Sandbox Code Playgroud)
我可能不得不将此作为一个单独的问题提出。
实际上不是,注释仅在编译时处理。您无法处理或提供动态数据。配置数据必须是固定的或恒定的。
如果你使用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>
Run Code Online (Sandbox Code Playgroud)
来源链接
如果您需要任何进一步的配置,则必须为 CORS 处理提供自己的过滤器,然后只需替换过滤器链中的 CORS 过滤器即可。
| 归档时间: |
|
| 查看次数: |
2964 次 |
| 最近记录: |