AWS - 如何在Java Web应用程序的子域和域之间共享会话?
问题描述:
我有一个运行在使用AWS Elastic Beanstalk部署到EC2实例的Tomcat 8容器上的Java 8 Web应用程序。然后,我将Route 53配置为将myapp.com
指向Elastic Beanstalk端点作为别名,并且与www.myapp.com
一样。AWS - 如何在Java Web应用程序的子域和域之间共享会话?
问题是,当我用他们任何一个登录时,会话不与另一个共享。例如,如果我使用myapp.com
登录,然后尝试访问www.myapp.com
,则系统会要求我再次登录。 这个问题是可以重复使用的,反之亦然。
我读过this answer解释这个问题,虽然我理解这个理论,但我不确定如何真正实现这个。我尝试将www.myapp.com
直接指向myapp.com
作为路由53上的别名。我还尝试配置EB以使用Elastic Load Balancer并检查粘性会话选项。
这是可以在AWS上配置的东西,还是我需要配置我的代码来适应这种情况?一个例子会非常有帮助。该应用程序是一个带有JSP的标准Enterprise Java Web应用程序,并使用Spring Security进行身份验证。
答
基本上你需要Tomcat服务器在每个响应的每个Set-Cookie
标题上设置domain="myapp.com"
。
有很多方法可以做到这一点。但最简单的方法是在您的应用程序中编辑/src/resources/application.properties
文件并将server.session.cookie.domain
设置为myapp.com
。