我正在使用jhipster v2.27.2 我通过取消注释application.yml
中的行来启用了corsjhipster:
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。
答案 0 :(得分:7)
在默认的SecurityConfiguration
中看起来,它不会跳过OPTIONS的安全检查。
尝试在antMatcher
SecurityConfiguration.java
添加到受保护的void configure(HttpSecurity http)方法
.antMatchers(org.springframework.http.HttpMethod.OPTIONS, "/api/**").permitAll()
答案 1 :(得分:0)
如果您忘记在指定的URL上注册cors,有时会出现此问题。在WebConfigurer中查找corsFilter并添加这些行
log.debug("Registering CORS filter");
source.registerCorsConfiguration("/api/**", config);
答案 2 :(得分:0)
SecurityConfiguration.java
中的另一个选项。不用在antMatcher
替代中使用configure(HttpSecurity)
,而是将其添加到configure(WebSecurity)
替代中...
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")