我正在使用Sping Boot 做一个简单的rest服务。为了在Angular 2中使用它,我在OAuth /token端点上检索令牌时遇到了CORS问题。
Chrome中的错误消息如下。
错误消息:
zone.js:101 OPTIONS http://192.168.0.9:8080/api/oauth/token
XMLHttpRequest cannot load http://192.168.0.9:8080/api/oauth/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 401.
相关文件如下。
MyConfig.java
@Configuration
public class MyConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("**")
.allowedOrigins("*").allowedMethods("POST, GET, HEAD, OPTIONS")
.allowCredentials(true)
.allowedHeaders("Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers")
.exposedHeaders("Access-Control-Allow-Origin,Access-Control-Allow-Credentials")
.maxAge(10);
}
};
}
}
OAuth2ResourceServerConfig.java
@Configuration
@EnableResourceServer
class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.anonymous()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS,"**").permitAll()
.antMatchers("/authenticated/**").authenticated()
;
}
}
我是Java和Spring新手,我发现了一些类似的问题,比如在检索TOKEN时,OPTIONS请求上出现了OAuth2 - Status 401,但是我真的不明白如何使它在Sping Boot 中工作。
请注意,正常的rest控制器端点工作正常。问题是OAuth /token,选项请求返回401状态。
4条答案
按热度按时间pbossiut1#
以下是原生Spring Framework解决方案:
mspsb9vt2#
浏览器通过带有OPTIONS头的请求检查CORS设置。如果您已配置授权,OPTIONS请求将被视为未授权而被阻止。
您只需在WebConfigurerAdapter中添加cors支持即可。
请查看此链接以了解更多信息:https://www.baeldung.com/spring-security-cors-preflight
lztngnrs3#
可将此CORS过滤器添加到工程中
iezvtpos4#
如果您使用的是spring Boot + Spring OAuth,则必须添加
到您的CORS过滤器