我在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
我认为错误的主要原因已经在错误本身中突出显示。
对预检请求的响应未通过权限改造检查。
这意味着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)
。