【发布时间】:2021-02-11 23:45:17
【问题描述】:
我有两个应用程序。
在 Firebase 上运行的前端(Angular)
在 App Engine 上运行的后端 Spring Boot (Java11)
尝试访问应用引擎中的任何端点时遇到此错误
"Access has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource"
有趣的是,在我的本地机器上一切正常。 cors没有问题。 所以,我猜问题出在应用引擎的配置或其他方面。
有人可以帮我解决这个问题吗?我已经花了很多时间试图修复它。 已经阅读了很多 stackoverflow 类似的问题。 最后一个:How to configure CORS in a Spring Boot + Spring Security application?
在谷歌文档中找不到任何有用的东西。
这是我的 app.yaml 文件
runtime: java11
instance_class: F4
vpc_access_connector:
name: projects/<project_id>/locations/<location>/connectors/<connectors_name>
这里是我的配置文件: CorsFilterConfig.java
@Configuration
public class CorsFilterConfig {
@Value("${allowed-origin}")
private String allowedOrigin;
@Bean
public FilterRegistrationBean<CorsFilter> simpleCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Collections.singletonList(allowedOrigin));
config.setAllowedMethods(Collections.singletonList("*"));
config.setAllowedHeaders(Collections.singletonList("*"));
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}
allowedOrigin 指向https://<firebase.domain>
安全配置.java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable()
.authorizeRequests().anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.oauth2ResourceServer().jwt();
端点示例
@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {
@GetMapping
public String hello() {
return "hello world";
}
}
【问题讨论】:
标签: java spring-boot google-app-engine google-cloud-platform cors