当前位置: 首页 > 知识库问答 >
问题:

Angular Spring Boot-无法通过HTTPS发送cookie

谷善
2023-03-14

我有一个角度12前端应用程序与Spring Boot后端应用程序通信。应该使用cookie通过CSRF令牌调用API,但我的逻辑似乎只适用于localhost。

请查找以下代码片段:

  • 通过ngx cookie服务设置角度cookie:
this.cookieService.set(key, value, {
   secure: environment.apiHost.startsWith('https'),
   sameSite: environment.apiHost.startsWith('https') ? 'None' : undefined
});
  • 在每次请求之前调用角度拦截器:
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工作正常,而通过HTTPS调试调用时,Cookie属性不会出现。

你对此有什么建议吗?

提前谢谢你。

共有1个答案

吴刚毅
2023-03-14

这里的唯一原因可能是在创建cookie时,您没有设置后端域的域。您可以执行以下操作

var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";

在上述情况下example.com是您的后端域名。或者通过使用cookie api,请参考这里:-https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Cookies_API

 类似资料:
  • 我目前有一个邮件服务器正在运行。我可以通过 mywebsite.com/roundcube/ 从这个网站我可以发送和接收电子邮件适当。日志显示所有的邮件进出都很好。我从这里发到我的gmail账户,然后又发回来。 然而,我真正想做的是使用javax mail从java发送一些邮件。

  • 问题内容: 我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。 这是代码的一部分: 和功能: 客户端连接如下: 正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么? 问题答案: 您不能像服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.

  • 我阅读了javamail-android的指南和一些关于StackOverflow的帖子。例如。如何在Android中使用JavaMail API发送邮件?我收到消息“邮件发送成功...”。但邮件不会到达收件人地址。我有以下输出: 我如何修复它或使用另一种方式发送电子邮件?

  • 我使用SendInBlue Java Api发送电子邮件,我在scala中编写了以下代码: 但我得到了这个错误:{“代码”:“失败”,“消息”:“需要有效的”至“电子邮件地址”,“数据”:[]}

  • 问题内容: 我正在学习Java套接字。我正在尝试向Facebook发送HTTPS GET请求,如下所示: 然后,我尝试侦听来自服务器的传入数据,如下所示: 但是我没有从服务器获得任何返回数据。为什么? 问题答案: 两个答案。 您正在尝试与HTTPS服务器通信。这要求您建立一个SSL / TLS通道。这在纯套接字上确实很难>>您必须实现连接协商,密钥链的客户端验证,会话加密/解密等。 一个更合理的方

  • 具有以下邮件配置设置: 以及以下属性: 我得到以下错误: JAVAlang.RuntimeException:javax。邮政MessaginException:无法连接到SMTP主机:SMTP。我们德勤。com,端口:25;嵌套的例外是:java。网SocketException:权限被拒绝: 当我使用gmail作为“发件人”帐户和“收件人”中的Outlook帐户时,代码是一样的。 我试着设置s