在我的 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[]
虽然@CrossOrigin看起来很简单,但它不适用于多个逗号分隔的域。这在 Spring Boot 中对我来说适用于多个域和多路径配置。
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