问题描述
我有一个Web应用程序,其前端是通过vue-cli开发的,并在localhost:8081上运行,后端是一个使用tomcat的独立项目,并且在localhost:8080上运行
后端有一个控制器servlet,该控制器servlet根据一个动作将工作委托给另一个servlet。 当登录页面将登录信息提交给控制器时,控制器创建HttpSession,调用LoginServlet验证凭据,然后将响应发送到控制器,控制器将响应登录页面。到目前为止,如果我们在ControllerServlet和LoginServlet上检查HttpSession,它们将完全匹配。
现在,登录已经成功通过vue-router将admin组件推送到url:localhost:8081 / admin上,这时我们有两个get请求,两个请求都发送给ControllerServlet,后者将把工作委托给另一个servlet。如果我们检查控制器和第三个Servlet上的会话,则它们匹配。但是,如果我们从这3个请求中检查HttpSession,则它们彼此不同,servlet会为每个请求创建一个新请求。如何使该HttpSession持久化?问题是由于vue运行在8081上,而后端运行在8080上吗?
解决方法
直到现在,如果我们在ControllerServlet上以及在上检查HttpSession, 它们完美匹配的LoginServlet。
当然,它们将匹配,因为ControllerServlet
和LoginServlet
的会话是由同一台服务器(在8080端口运行)创建的。
由运行在端口8080上的服务器创建的会话与运行在端口8081上的服务器没有关系,因此期望它们匹配是错误的。在极少数情况下,如果它们匹配,那可能只是一个巧合。
运行在端口8080上的服务器唯一的方法是通过保留和查询会话来获取运行在端口8080上的服务器创建的会话,即,您将必须保留运行在该端口上的服务器创建的会话。将8080端口连接到数据存储区(DB,NFS等),从该服务器在该端口运行的服务器8081必须查询并获取它。