有人知道在MVC CORS映射中使用systemProperties的方法吗? 我在Elastic Beanstalk上有一个Spring MVC REST后端,在Cloudfront上有一个Frontend。我想使用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);
}
}