Jhipster CORS启用

时间:2018-08-07 15:26:36

标签: java spring-boot cors jhipster

我正在使用Jhipster生成API。

我的api已启用,可以调用它:

  

https://api.staging.test.com/

并且我的FE应用已打开:

  

https://staging.test.com/

这是我在application-prod.yml中启用Cors的配置

cors:
     allowed-origins: "https://staging.test.com/"
     allowed-methods: "*"
     allowed-headers: GET, PUT, POST, DELETE, OPTIONS
     exposed-headers: "Authorization,Link,X-Total-Count"
     allow-credentials: true
     max-age: 1800

我仍然收到此错误:

  

对预检请求的响应未通过访问控制检查:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。因此,原点“ https://staging.test.com”不是   允许访问。如果不透明的响应满足您的需求,请设置   请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

要启用CORS,在Spring启动中还需要做更多的事情吗?

4 个答案:

答案 0 :(得分:3)

在JHipster的Prod模式下启用CORS所需的唯一配置是设置jhipster.cors配置,如下所示。需要注意的一件事是,如果您的前端正在使用端口,则需要将其包含在allowed-origins键中。

jhipster:
    cors:
        allowed-origins: "https://staging.test.com:8080"
        allowed-methods: "*"
        allowed-headers: "*"
        exposed-headers: "Authorization,Link,X-Total-Count"
        allow-credentials: true
        max-age: 1800

这是由JHipsterProperties加载的,并在WebConfigurer.java中用于应用CORS配置。

答案 1 :(得分:2)

要在 PROD 模式下启用 CORS,请注释掉基 jhipster.cors 中的 application.yml 并根据需要进行自定义。

  cors:
    allowed-origins: 'https://staging.test.com'
    allowed-methods: '*'
    allowed-headers: '*'
    exposed-headers: 'Authorization,Link,X-Total-Count,X-${jhipster.clientApp.name}-alert,X-${jhipster.clientApp.name}-error,X-${jhipster.clientApp.name}-params'
    allow-credentials: true
    max-age: 1800

如果您配置了任何新的根路径,请确保它已在 WebConfigurer.java

中为 cors 注册
@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = jHipsterProperties.getCors();
    if (!CollectionUtils.isEmpty(config.getAllowedOrigins())) {
        log.debug("Registering CORS filter");
        source.registerCorsConfiguration("/newrootpath/**", config); // add this
        source.registerCorsConfiguration("/api/**", config);
        source.registerCorsConfiguration("/management/**", config);
        source.registerCorsConfiguration("/v2/api-docs", config);
        source.registerCorsConfiguration("/v3/api-docs", config);
        source.registerCorsConfiguration("/swagger-resources", config);
        source.registerCorsConfiguration("/swagger-ui/**", config);
    }
    return new CorsFilter(source);
}

如果新的根路径是使用另一个 AuthenticationManager(一个扩展 WebSecurityConfigurerAdapter 的类)配置的,请确保也在那里添加过滤器 CorsFilter

答案 2 :(得分:0)

解决方案成功了吗?尝试从Ionic生成的移动应用访问服务器端时,我遇到了同样的问题。

答案 3 :(得分:0)

面对同样的问题。我发现最简单,最安全的方法是仅针对您需要在控制器中公开的特定方法启用cors。 在为您的api提供服务的方法中,添加@CrossOrigin("*")批注。这可以在生产中使用,无需对application-prod.yml进行任何更改。