繁体   English   中英

在springboot中跨子域共享cookie

[英]Share a cookie across subdomains in springboot

我有一个 web 应用程序,它托管在https://example.com上。 I would like to share a session cookie between the main domain https://example.com and sub-domain https://www.example.com . 因此,如果用户从一个域切换到另一个域,则不需要重新登录。 我如何在 springboot 2.2.6 中实现这一点?

这是我尝试过的:我去了 application.properties 并设置server.servlet.session.cookie.domain=.example.com现在,这没有帮助。 我收到一个错误:

java.lang.IllegalArgumentException: An invalid domain [.example.com] was specified for this cookie
    at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:210) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:145) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.connector.Response.generateCookieString(Response.java:973) ~[tomcat-embed-core-9.0.33.jar:9.0.33]

If I set server.servlet.session.cookie.domain=example.com , then the cookie is not visible for http://www.example.com and if I set server.servlet.session.cookie.domain=www.example .com ,则 cookie 对于http://example.com不可见

我已阅读有关 Rfc6265CookieProcessor 和 LegacyCookieProcessor 的讨论,但我不知道解决此问题的正确方法。

Springboot 2.2.6 使用 tomcat 版本 9.0.*

那么,我该如何解决这个问题呢?

编辑:

我只在本地主机上尝试上述更改,而不是在生产环境中。 Instead of accessing http://www.example.com , I was doing https://www.localhost and instead of accessing http://example.com , I was doing http://localhost

正确的值是:

server.servlet.session.cookie.domain=example.com

我正在尝试的是我在 localhost 上进行更改,但它们对我不起作用。 我正在手动修改 chrome 控制台中的值,并希望看到在 https://localhost 上设置的 cookies 与域 localhost 在域 https:// 的另一个选项卡中可见域https :// 并没有发生。

我在这里阅读了答案: Share cookie between subdomain and domain and @Cesc 对此答案的评论是:

我不确定该放在哪里,所以我选择了已接受答案的评论。 在我的本地主机上证明上述内容需要很长时间并且实验失败,直到我想到我应该在名称中使用一个点来调用本地主机。 像“localhost.com”或类似的东西。 然后所有的“设置cookies”行为都开始遵循这个答案中写的解释。 希望这可能对某人有所帮助。

因此,我直接尝试了对生产的更改,并且效果很好。 我仍然无法让它在本地主机上工作。 我在 localhost 上访问我的网站的方式是:

https://localhost 和https://www.localhost Based on @Cesc 's comment, I probably need to access the website on localhost as https://www.localhost.com or https://localhost.com and then it will work. 但是,我还没有尝试过。

与其在您的开发机器上使用“localhost”进行测试,不如尝试使用您机器的完全限定主机名。 在针对我们的单点登录平台测试身份验证时,我遇到了类似的挑战。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM