CORS Origin Spring Boot Jhipster - 飞行前失败

时间:2016-03-21 21:40:57

标签: spring-boot cors yaml jhipster

我正在使用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。

3 个答案:

答案 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, "/**")