提问者:小点点

Spring Boot-@CrossOrigin注释中application.properties的多个域


我有Spring Boot应用程序,部署到许多环境中,因此需要设置多个CORS源,以便从我们的Web应用程序访问。

这本身不是问题,因为我可以在@CrossOrigin注释中提供逗号分隔的域列表。我还有一些控制器不应该被我们的Web应用程序访问,所以这些控制器根本不会被@CrossOrigin注释。

例如,这是我的CarController需要此注释和PartController不需要它:

@CrossOrigin(origins = {"domain1", "domain2", "domain3, ..."})
@RestController
@RequestMapping("/v1/cars")
public class CarController {
   ...
}
@RestController
@RequestMapping("/v1/parts")
public class PartController {
   ...
}

由于此列表很长,我想将上述域移动到application.properties:

allowed.cors.origins=domain1,domain2,domain3,domain4, ....,domain10

我知道我可以在类中使用@Value(…)来获取allowed.cors.origins属性中设置的值。但是,当在我的控制器上使用像@CrossOrigin这样的注释时,我不能这样做。

如何使用上面application.propertiesCarsController的@CrossOrigin注释中的文件中的值?

我的解决方案

我接受了@birca123的以下回答,但我没有使用或测试它,但它是有意义的,它可能对一些人有用。然而,我发现实际上可以在注释中引用application.properties设置,如@CrossOrigin。Spring Boot启用application.propertiesCORS很有帮助,所以我在下面提供了我现在使用的解决方案。

在我的application.properties设置变量:

allowed.cors.origins=https://somedomain.com

然后您可以在代码和注释中获取此属性,如下所示。

在代码中,使用@Value,例如:

    @Value("${allowed.cors.origins}")
    private List<String> allowedCorsOrigins;

@CrossOrigin注释中,如:

@CrossOrigin(origins = "${allowed.cors.origins}")

所以,现在我的控制器看起来像:

@CrossOrigin(origins = "${allowed.cors.origins}")
@RestController
@RequestMapping("/v1/cars")
public class CarController {
   ...
}

请注意,我意识到我不需要多个域,所以我远离了它,但它应该以同样的方式工作。我使用@Value("${allowed.cors.origins}")私有列表对其进行了测试


共1个答案

匿名用户

创建一个全局CORS配置,如下所示,而不是使用@CrossOrigin注释控制器。可以声明多个CORS映射以涵盖所有需要跨域请求处理的endpoint。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

  @Value("${allowed.cors.origins}")
  String[] allowedOrigins;

  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry
        .addMapping("/v1/cars/**")
        .allowedMethods("*")
        .allowedHeaders("*")
        .allowedOrigins(allowedOrigins);
    registry
        .addMapping("/another-cors-mapping/**")
        .allowedMethods("*")
        .allowedHeaders("*")
        .allowedOrigins(allowedOrigins);
     // Add more mappings...
  }
}

参考:Spring文档-CORS-全局配置