Spring Boot通过application.properties启用CORS

use*_*476 16 cors spring-boot

我使用的Spring Boot API RESTful由您的实体类自动启动.我从前端Web应用程序中消耗了这个apiRest,但它给了我这个错误:

请求的资源上不存在"Access-Control-Allow-Origin"标头

我正在使用此处指定的applicantion.properties设置CORS配置.

我的基本配置是:

endpoints.cors.allow-credentials=true
endpoints.cors.allowed-origins=*
endpoints.cors.allowed-methods=*
endpoints.cors.allowed-headers=*
Run Code Online (Sandbox Code Playgroud)

我在这些变量中尝试了不同的组合,但仍然无效.有任何想法吗?

Gok*_*kay 24

这在官方的Spring文档中并不是很清楚,并且很容易被这里链接的官方Spring Boot文档误导

事实是,你CAN NOT使用application.properties文件设置全局CORS congfiguration.您必须使用JavaConfig描述这里.

只需@EnableWebMvc@Configuration扩展WebMvcConfigurerAdapter和覆盖addCorsMappings方法的类上使用注释,如下所示:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("http://domain2.com")
            .allowedMethods("PUT", "DELETE")
            .allowedHeaders("header1", "header2", "header3")
            .exposedHeaders("header1", "header2")
            .allowCredentials(false).maxAge(3600);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 从Spring 5而不是"extends WebMvcConfigurerAdapter"使用"implements WebMvcConfigurer"(使用默认方法的接口,其中一个是addCorsMappings(CorsRegistry注册表)) (8认同)

use*_*476 23

我自己得到了答案:

只需将其添加到application.java即可

  @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)


小智 12

endpoint.cors.*作为前缀的Spring引导属性由Actuator使用,这就是为什么它不能与MVC端点一起使用.


mp3*_*415 7

无论如何,我们可以将实际的 cors 相关 url 移动到 application.properties。它适用于 Spring Boot 5。

App.java(主类):

@SpringBootApplication
public class App extends SpringBootServletInitializer {

    @Autowired
    private Environment env;

    public static void main(String[] args) {
        SpringApplication.run(ReportsApplication.class, args);
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                String urls = env.getProperty("cors.urls");
                CorsRegistration reg = registry.addMapping("/api/**");
                for(String url: urls.split(",")) {
                    reg.allowedOrigins(url);
                }
            }
        };
    }    
}
Run Code Online (Sandbox Code Playgroud)

应用程序属性:

cors.urls=http://localhost:3000
Run Code Online (Sandbox Code Playgroud)


Fab*_*ian 5

如果您想将它们保存在 application.properties 中,您可以注入字符串

开发

# application-dev.properties
appName.allowedApi=http://localhost:4200
Run Code Online (Sandbox Code Playgroud)

产品

# application-prod.properties
appName.allowedApi=https://appname.com
Run Code Online (Sandbox Code Playgroud)

在你的 WebConfig.java 中

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Value("${appName.allowedApi}")
    private String myAllowedApi;
  
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins(myAllowedApi);
    }
}
Run Code Online (Sandbox Code Playgroud)