Spring MVC CORS 映射配置

问题描述 投票:0回答:1

有人知道在 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);
    }
}
spring spring-mvc cors
1个回答
0
投票

占位符在这种情况下似乎也不起作用。你知道后面发生了什么吗?为了使用占位符,我必须在 xml 文件中使用过滤器标签来实现相同的功能,而不是使用 mvc:cors 标签。

© www.soinside.com 2019 - 2024. All rights reserved.