有人知道在 MVC CORS 映射中使用 systemProperties 的方法吗? 我在 Elastic Beanstalk 上有一个 Spring MVC REST 后端,在 Cloudfront 上有一个前端。我想使用 Elastic Beanstalk 配置变量(作为 -DCORS_FRONTEND_URL = http://www.example.com 传递),因此我需要 systemProperties 或等效变量。
我拥有的是:
<mvc:cors>
<mvc:mapping path="/**" allowed-methods="GET, PUT"
max-age="3600" allowed-origins="http://www.example.com"/>
</mvc:cors>
我想要的是:
<mvc:cors>
<mvc:mapping path="/**" allowed-methods="GET, PUT"
max-age="3600" allowed-origins="#{systemProperties['CORS_FRONTEND_URL']}"/>
</mvc:cors>
更新:
所以我编辑了 CorsBeanDefinitionParser 类并打印出
allowedOrigins
数组。
它打印出
#{ systemProperties['cors.frontend.url'] }
,这意味着 SpEL 没有像我预期的那样在应用程序上下文中进行评估。
看起来 SpEL 评估仅适用于手动 bean 定义。
更新2: Java Context 工作没有问题。
/**
* Spring Web MVC Java Context Configuration
*/
@Configuration
@EnableWebMvc
public class WebMvcContext extends WebMvcConfigurerAdapter {
private final String corsFrontendUrl;
@Autowired
public WebMvcContext(@Nullable @Value("#{ systemProperties['cors.frontend.url'] }") String corsFrontendUrl){
this.corsFrontendUrl = corsFrontendUrl;
}
@Override
public void addCorsMappings(@Nonnull CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins(corsFrontendUrl)
.allowedMethods("GET", "PUT")
.maxAge(3600);
}
}
占位符在这种情况下似乎也不起作用。你知道后面发生了什么吗?为了使用占位符,我必须在 xml 文件中使用过滤器标签来实现相同的功能,而不是使用 mvc:cors 标签。