【发布时间】:2022-02-16 17:15:09
【问题描述】:
我有一个 Angular 12 前端应用程序与 Spring Boot 后端应用程序通信。 API 应该被称为使用 cookie 传递 CSRF 令牌,但似乎我的逻辑只适用于 localhost。
请找到以下sn-ps的代码:
- 通过 ngx-cookie-service 设置 Angular cookie:
this.cookieService.set(key, value, {
secure: environment.apiHost.startsWith('https'),
sameSite: environment.apiHost.startsWith('https') ? 'None' : undefined
});
- 在每个请求之前调用 Angular 拦截器:
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
// Handle cookies
request = request.clone({
withCredentials: true
});
return next.handle(request).pipe(
...
);
}
- Spring Boot CORS 通用配置:
List<String> allowedOrigins = new ArrayList<>();
allowedOrigins.add("http://localhost:4200");
allowedOrigins.add("https://<host_name_not_localhost>");
config.setAllowCredentials(true);
config.setAllowedOrigins(allowedOrigins);
config.setAllowedHeaders(Arrays.asList("Origin", "Content-Type", "Accept"));
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
source.registerCorsConfiguration("/api/**", config);
return new CorsFilter(source);
老实说,我不明白问题出在前端还是后端...再次,通过 HTTP (localhost) 发送 cookie 工作正常,而 Cookie通过 HTTPS 调试调用时不显示属性。
您对此有什么建议吗?
提前谢谢你。
【问题讨论】:
-
后端托管的域是否与前端不同?
-
您好,前端和后端应用的域是一样的。
标签: java angular spring-boot cookies ngx-cookie-service