请求的资源上不存在“Access-Control-Allow-Origin”标头,并且 JWT 令牌不以 Bearer String 开头

Posted

技术标签:

【中文标题】请求的资源上不存在“Access-Control-Allow-Origin”标头,并且 JWT 令牌不以 Bearer String 开头【英文标题】:No 'Access-Control-Allow-Origin' header is present on the requested resource and JWT Token does not begin with Bearer String 【发布时间】:2021-09-23 06:53:34 【问题描述】:

我正在开发一个基于 Web 的应用程序,该应用程序带有 angular 和 spring boot。 Jwt 已生成,用户可以登录,但是当我想在登录后获取用户信息时,它会在浏览器上显示此错误:

CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080/api/user/”处的 XMLHttpRequest:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

在 IntelliJ 中它说: JWT Token 不以 Bearer String 开头

我该怎么办?

【问题讨论】:

您是否启用了 CORS?如果没有,请执行此操作并将 URL 添加到源。这是如何在 Spring Boot spring.io/guides/gs/rest-service-cors 中执行此操作的指南。你检查你的 JWT 是否正确?请检查您的实施如何配置您的 JWT。 【参考方案1】:

在 Spring Security 中启用跨域引用共享的一种方法是:

在您的网络安全配置类(注解为@EnableWebSecurity)中,您需要首先在HttpSecurity 对象上启用CORS:

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.cors().and().csrf().disable()
    .authorizeRequests()
    ...


然后在同一个类中添加一个@Bean注释方法,该方法设置一些配置(如允许的来源和响应头)并返回CorsConfigurationSource

@Bean
public CorsConfigurationSource corsConfigurationSource() 
    final CorsConfiguration config = new CorsConfiguration();

    config.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
    config.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH"));
    config.setAllowCredentials(true);
    config.setAllowedHeaders(Arrays.asList("Authorization", "Cache-Control", "Content-Type"));

    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", config);

    return source;

关于“JWT Token 不以 Bearer String 开头”,您需要在请求 Authorization 标头中将 Bearer 连同 JWT 令牌(空格分隔)一起发送:

Authorization: Bearer xxxxx.yyyyy.zzzzz

【讨论】:

CorsConfigurationSource 方法帮助我修复了错误。谢谢【参考方案2】:

您需要检查 api 是否已在本地启动并运行。

http://localhost:8080/api/user/

您还需要检查此 api 是否启用了此 cross origin

有一个 chrome 扩展名为 Allow cors。将此扩展添加到您的浏览器,它将允许您本地的 cors。

【讨论】:

以上是关于请求的资源上不存在“Access-Control-Allow-Origin”标头,并且 JWT 令牌不以 Bearer String 开头的主要内容,如果未能解决你的问题,请参考以下文章

django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”

如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头

Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头

请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头

Angular 2请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]

API 请求错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头