使用属性占位符表达式将 String[] 从属性文件加载到 @CrossOrigin 的 origins 字段

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

在我的 Spring Boot 应用程序中,我有以下控制器

@RestController(value = "ProjectController")
@CrossOrigin(origins = {"${app.api.settings.cross-origin.urls}"})
public class ProjectController {
   // some request mapping methods
}

属性

app.api.settings.cross-origin.urls
已经是一个键,在 application.properties 文件中以逗号分隔有效 url,如

app.api.settings.cross-origin.urls=http://localhost:3000, http://localhost:7070

这种方法一直有效,直到我只有单个值,例如

app.api.settings.cross-origin.urls=http://localhost:3000
但不适用于逗号分隔值。
origins
内的
@CrossOrigin
字段的类型为
String[]
,但它不会自动转换为
String[]
。 我的意思是框架应该提供某种方法来实现这一点。不是解决办法。 我可以使用属性文件中的逗号分隔的 url,使用
@Value
List<String>
String[]
作为
@Configuration
类中的字段,如下所示

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Value("${app.api.settings.cross-origin.urls}")
    private String[] consumerUiOrigins;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
         registry
           .addMapping("/api/**")
           .allowedOrigins(consumerUiOrigins);
    }
}

但这将是具有应用程序广泛适用性的全局配置。我想坚持使用更细粒度的基于注释的 CORS 配置。


所以我在下面清楚地提出了我的问题。

是否可以使用属性plcaholer表达式(

@CrossOrigin

)将属性文件中的逗号分隔值注入到具有相同类型的spring注释字段中,即String[]

??????如果是的话怎么办???如果没有,那么我们可以调整一些核心框架类来实现这一点吗???请任何人帮忙....
附注- 请不要将我的问题标记为与 
Use Spring Properties in Java with CrossOrigin Annotation or in Spring-Config XML
 重复

我的问题更多是关于具有多元素类型(如

${*})的 Spring 注释字段内的属性占位符表达式的使用,而不是关于 Spring 应用程序中 CORS 的配置。

尝试在 application.properties 中执行以下操作:

String[]
spring spring-boot spring-web property-placeholder application.properties
2个回答
0
投票

虽然@CrossOrigin看起来很简单,但它不适用于多个逗号分隔的域。
这在 Spring Boot 中对我来说适用于多个域和多路径配置。

0
投票
参考 -

https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5/#cors

String[]

app.api.settings.cross-origin.urls="http://localhost:3000","http://localhost:7070"

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${cross-origin-domains:https://example1.com,https://example2.com}")
    private List<String> crossOriginDomains;

    @Value("${cross-origin.paths:/path1/**,/path2/**}")
    private List<String> crossOriginPaths;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors(withDefaults())
        .
        //Any other configuration you need
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(this.crossOriginDomains);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        for (String api : this.crossOriginPaths) {
            source.registerCorsConfiguration(api, configuration);
        }
        return source;
    }

}
中,您可以拥有这些配置和值

application.properties

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