我正在使用Jhipster生成API。
我的api已启用,可以调用它:
并且我的FE应用已打开:
这是我在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启动中还需要做更多的事情吗?
答案 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
@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进行任何更改。