Spring MVC CORS映射配置

时间:2017-01-31 17:09:29

标签: spring spring-mvc cors

有人知道在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);
    }
}

0 个答案:

没有答案