邪恶的 CORS/CORB - Spring 和休眠、Springboot、Maven 和 Angular js 2,不起作用 - 允许访问控制来源
Posted
技术标签:
【中文标题】邪恶的 CORS/CORB - Spring 和休眠、Springboot、Maven 和 Angular js 2,不起作用 - 允许访问控制来源【英文标题】:The evil CORS/CORB - Spring and hibernate, Springboot, Maven and Angular js 2, not working - Allow access control origin 【发布时间】:2018-12-24 03:29:14 【问题描述】:请帮忙,我已经尝试了各种方法来修复这个错误,我尝试了 Tomcat web.xml
,通过添加过滤器映射、CorsFilter
bean、@CrossOrigin
,以及禁用浏览器网络安全,但是仍然,这个错误不会发生......也许它隐藏在我无法运动的东西后面。有没有人更好地理解为什么这个错误不会消失。
下面是我的ProductApplication.java
bean 方法:
@Bean
CorsConfigurationSource corsConfiguarationSource()
CorsConfiguration configurations = new CorsConfiguration();
configurations.setAllowedOrigins(Arrays.asList("*"));
configurations.setAllowCredentials(true);
configurations.setAllowedHeaders(Arrays.asList("Allow-Control-Allow-Headers","Allow-Control-Allow-Origin","Access-Control-Request-Method","Allow-Control-Request-Headers","Origin","Cache-Origin","Content-Type", "Authorization"));
configurations.setAllowedMethods(Arrays.asList("DELETE","GET","POST","PATCH","PUT"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configurations);
return source;
我也尝试过使用 bean:
@Bean
public CorsFilter corsFilter()
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return source;
我也尝试过使用带有 @Configuration
注释的单独类:
@Configuration
public class RestConfig
@Bean
public CorsFilter processCorsFilter()
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
source.registerCorsConfiguration("/**", config);
//FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
//bean.setOrder(0);
return new CorsFilter(source);
我也试过控制器类中的@CrossOrigin
注解:
@CrossOrigin(origins="http://localhost:3000")
@GetMapping("/client")
public ResponseEntity<List<Client>> getAllClients()
List<Client> clientList = services.getClientsList();
if(clientList != null)
return new ResponseEntity<>(clientList, HttpStatus.OK);
else
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
提前致谢。
【问题讨论】:
请注意:我知道这可能是一个重复的问题,但是,我已经尝试了前面问题中提到的所有方法......我无法获胜......令人惊讶的是,甚至禁用了浏览器网络安全无法战胜这个邪恶的错误...请帮助,我们将不胜感激。 它们中的任何一个都被调用了吗?如果您在浏览器开发者工具中签入,是否会返回任何标头? 是的,我得到 404 not found 错误:消息没有访问控制来源 如果出现 404 错误,说明你的 URL 不正确,你可以在 postman 中测试 URL 吗? 让我这样做,但是:URL 就像localhost:8080/client 一样简单 【参考方案1】:根据(Spring) CORS documentation:
确保首先处理 CORS 的最简单方法是使用
CorsFilter
。用户可以将CorsFilter
与 Spring 集成 通过使用以下内容提供CorsConfigurationSource
来确保安全:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
// by default uses a Bean by the name of corsConfigurationSource
.cors().and()
// ... more configuration calls here
@Bean
CorsConfigurationSource corsConfigurationSource()
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
我自己使用了这个方法,如前所述,通过覆盖 configure 方法 (WebSecurityConfigurerAdapter#configure) 并提供 CorsConfigurationSource bean 并且它可以工作。
相关阅读:
HttpSecurity#cors【讨论】:
我也看到了这篇文章...但是我被这三个点弄糊涂了...第 9 行中的这三个点应该是什么? 这三个点表示可以添加更多配置。见this example。这是我的一个演示项目,其中添加了更多配置。 @NeoSono 我编辑了代码以使其清晰 我是否还需要重写配置方法...?还是只吃豆子? @NeoSono,是的,当您使用 Spring Security 时,请参阅 HttpSecurity#cors 我将其添加到帖子中以上是关于邪恶的 CORS/CORB - Spring 和休眠、Springboot、Maven 和 Angular js 2,不起作用 - 允许访问控制来源的主要内容,如果未能解决你的问题,请参考以下文章