我使用的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)
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)
无论如何,我们可以将实际的 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)
如果您想将它们保存在 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)
| 归档时间: |
|
| 查看次数: |
26926 次 |
| 最近记录: |