CORS Origin Spring Boot Jhipster - 飞行前失败
Posted
技术标签:
【中文标题】CORS Origin Spring Boot Jhipster - 飞行前失败【英文标题】:CORS Origin Spring Boot Jhipster - pre-flight fails 【发布时间】:2016-07-08 14:49:58 【问题描述】:我正在使用 jhipster v2.27.2 我通过取消注释 application.yml 中的行来启用 cors
jhipster:
async:
corePoolSize: 2
maxPoolSize: 50
queueCapacity: 10000
cors: #By default CORS are not enabled. Uncomment to enable.
allowed-origins: "*"
allowed-methods: GET, PUT, POST, DELETE, OPTIONS
allowed-headers: "*"
exposed-headers:
allow-credentials: true
max-age: 1800
在“WebConfigurer”中
@Bean
public CorsFilter corsFilter()
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = props.getCors();
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty())
source.registerCorsConfiguration("/api/**", config);
source.registerCorsConfiguration("/v2/api-docs", config);
source.registerCorsConfiguration("/oauth/**", config);
return new CorsFilter(source);
但是当我请求访问令牌时,我仍然看到这个错误
http://localhost:8080/oauth/token?username=admin&password=admin&grant_type=password&scope=read。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:9090” 使用权。响应的 HTTP 状态代码为 401。
【问题讨论】:
【参考方案1】:看起来在默认的SecurityConfiguration
中,它没有跳过对 OPTIONS 的安全检查。
尝试将以下antMatcher
添加到SecurityConfiguration.java
中的protected void configure(HttpSecurity http)
方法
.antMatchers(org.springframework.http.HttpMethod.OPTIONS, "/api/**").permitAll()
【讨论】:
【参考方案2】:如果您忘记在指定的 URL 上注册 cors,有时会出现此问题。在 WebConfigurer 中查找 corsFilter 并添加这些行
log.debug("Registering CORS filter");
source.registerCorsConfiguration("/api/**", config);
【讨论】:
【参考方案3】:SecurityConfiguration.java
中的另一个选项。而不是在configure(HttpSecurity)
覆盖中使用antMatcher
,而是在configure(WebSecurity)
覆盖中添加它...
public void configure(WebSecurity web) throws Exception
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")
【讨论】:
以上是关于CORS Origin Spring Boot Jhipster - 飞行前失败的主要内容,如果未能解决你的问题,请参考以下文章
CORS Origin Spring Boot Jhipster - 飞行前失败
如何在 Spring Boot 中测试 CORS?当我在 MockMvcBuilders 中尝试时,尽管 Origin 错误,它总是返回 200
使用 Spring Boot 和 Zuul 进行 CORS 预检请求的 Host vs Origin 标头
CORS 策略:请求的资源 Spring Boot Rest API 和 VUE 上不存在“Access-Control-Allow-Origin”标头