从原始反应应用程序访问“http://localhost:8000/oauth/token”处的 XMLHttpRequest 已被 CORS 阻止

Posted

技术标签:

【中文标题】从原始反应应用程序访问“http://localhost:8000/oauth/token”处的 XMLHttpRequest 已被 CORS 阻止【英文标题】:Access to XMLHttpRequest at 'http://localhost:8000/oauth/token' from origin react app has been blocked by CORS 【发布时间】:2021-11-28 00:42:19 【问题描述】:

我在 springboot 中为服务器端使用 oauth2,在客户端使用 React 应用程序。我正在从 react 应用程序中将 grant_type client_credentials 的令牌请求发送到 /oauth/token 并得到上述错误。

我已经使用@CrossOrigin 并且还使用 http.cors() 进行全局安全配置,但仍然在浏览器控制台中看到 Preflight cors block 错误。

错误:

从 'http://localhost:8000/oauth/token' 访问 XMLHttpRequest 来源 'http://localhost:3000' 已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:它 没有 HTTP ok 状态。 xhr.js:177 发布 http://localhost:8000/oauth/token net::ERR_FAILED

【问题讨论】:

【参考方案1】:

https://www.youtube.com/watch?v=7Yqb275FKmY 帮了我。问题是我的SimpleCORSFilter 类上的@Order(Ordered.HIGHEST_PRECEDENCE) 实现了过滤器类。

【讨论】:

【参考方案2】:

我认为错误的主要原因已经在错误本身中突出显示。

对预检请求的响应未通过访问控制检查。

这意味着 Spring Security 在预检请求的图片中,并且预检请求不包含有关身份验证的任何信息,因此 Spring Security 将此请求视为来自未经身份验证的客户端,因此拒绝它。

您必须确保首先处理 CORS,您可以通过使用 CorsFilter 来实现这一点。您可以通过使用以下方法提供 CorsConfigurationSource 来将 CorsFilter 与 Spring Security 一起使用

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 

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

    @Bean
    CorsConfigurationSource corsConfigurationSource() 
        CorsConfiguration configuration = new CorsConfiguration();
        
        // You can restrict the origin and method in the following stmt according to the requirement
        configuration.setAllowedOrigins(Collections.singletonList(CorsConfiguration.ALL));
        configuration.setAllowedMethods(Arrays.asList("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH"));
        
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    

【讨论】:

以上是关于从原始反应应用程序访问“http://localhost:8000/oauth/token”处的 XMLHttpRequest 已被 CORS 阻止的主要内容,如果未能解决你的问题,请参考以下文章

是否可以访问原始 iphone 音频输出?

从模态对原始组件反应本机调用函数

CORS 策略已阻止访问 fetch - Blazor 客户端 Web 程序集

如何从我的组件打开的窗口中反应性地检查更改

使用反应路由器从主页重定向到特定页面后访问从 NavLink 传递的数据

我如何在反应原生 webview 中从网页访问当前位置