Java Jhipster CORS启用
我正在使用Jhipster生成API 我的api已启用,让我们调用它: 我的FE应用程序已打开: 这是我在application-prod.yml中启用Cors的配置Java Jhipster CORS启用,java,spring-boot,cors,jhipster,Java,Spring Boot,Cors,Jhipster,我正在使用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: "Autho
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”标头出现在请求的服务器上
资源。因此,源“”不是
允许访问。如果不透明的响应满足您的需要,请设置
请求的模式为“无cors”,以获取禁用cors的资源
要在Spring boot中启用CORS,还有什么需要做的吗?在JHipster的Prod模式下启用CORS所需的唯一配置是设置
JHipster.CORS
配置,如下所示。需要注意的一点是,如果您的前端正在使用端口,则需要将其包含在允许来源
键中
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
这由JHIPSterpreProperties加载,用于应用CORS配置。面临同样的问题。我发现的最简单和最安全的方法是只为需要在控制器中公开的特定方法启用cors。
在为api提供服务的方法中,添加
@CrossOrigin(“*”)
注释。这在生产中有效,无需对application-prod.yml进行任何更改。要在生产模式下启用CORS,请在baseapplication.yml
中注释掉jhipster.CORS,并根据需要进行自定义
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
如果您已经配置了任何新的根路径,请确保它已在webconfig.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
(扩展WebSecurityConfigureAdapter
的类)配置了新的根路径,请确保也在那里添加筛选器CorsFilter
。cors键应该在jhipster
下,在application-prod.yml中是这样吗?是的,我测试了cors过滤器,他从application-prod.yml获得了良好的信息,其他一些东西不起作用。我确实这样做了,我得到:加载失败:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标题。因此不允许访问源“”。根据该错误消息,不要放置端口,也不要放置尾随的/
。允许的来源
应与请求的来源
标题完全匹配您的应用程序前面是否有可能也需要CORS的负载平衡器或代理?确保您自己添加的任何其他路径都包含在中(搜索“source.registerCorsConfiguration”).我发现了一篇关于注释的好文章。这个解决方案对我有效。很清楚!谢谢你,艾曼纽