提问者:小点点

访问XMLHttpRequest在'http://localhost:8000/oauth/token'从源反应应用程序已被阻止CORS


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

我已经使用了@CrossOrigin,也使用了http. cors()进行全局安全配置,但仍然在浏览器控制台中看到预检cors块错误。

错误:

访问XMLHttpRequest在'http://localhost:8000/oauth/token'从源'http://localhost:3000'已被CORS策略阻止:响应预检请求不通过权限改造检查:它没有HTTPok status. xhr.js:177 POSThttp://localhost:8000/oauth/token::ERR_FAILED


共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;
    }
}

匿名用户

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