首页 > 其他分享 >同一个tomcat 共享session

同一个tomcat 共享session

时间:2022-10-30 10:31:11浏览次数:60  
标签:web tomcat getAttribute session ServletContext 共享 WebappA HttpSession


问题记录 

最近学整理java项目

session常常用来存储一些公共信息供不同页面访问,比如用户登录信息。访问同一个tomcat下的不同项目所创建的session是不一样的。自然地面临了如何共享session的问题。

解决方案: 
1、修改tomcat的server.xml文件 
每一个web应用程序都有唯一一个ServletContext实例对象,被该web应用下面的每一个servlet共享。通过修改tomcat的server.xml,使不同web应用的ServletContext可以互相访问。然后,用ServletContext的setAttribute()方法把session存入ServletContext中,在另一个web程序就可以用getAttribute()方法取得传递过来的session。

server.xml文件修改如下:

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">
<Context path="/WebappA" debug="9" reloadable="true" crossContext="true"/> //WebappA为项目名,crossContext="true"是关键
<Context path="/WebappB" debug="9" reloadable="true" crossContext="true"/>
</Host>

crossContext属性的意思是:如果设置为true,你可以通过ServletContext.getContext() 调用另外一个WEB应用程序,获得ServletContext 然后再调用其getAttribute() 得到你要的对象。

java代码如下:

WebappA:

HttpSession session = request.getSession();
session.setAttribute("userId", "test");
ServletContext ContextA =session .getServletContext();
ContextA.setAttribute("session", session );

WebappB:

HttpSession sessionB = request.getSession();  
ServletContext ContextB = sessionB.getServletContext();
ServletContext ContextA= ContextB.getContext("/WebappA");// 这里面传递的是 WebappA的虚拟路径
HttpSession sessionA =(HttpSession)ContextA.getAttribute("session");
System.out.println("userId: "+sessionA.getAttribute("userId"));

标签:web,tomcat,getAttribute,session,ServletContext,共享,WebappA,HttpSession
From: https://blog.51cto.com/51souta/5807360

相关文章

  • 问题IllegalStateException: The mail session is already initialized解决
    概述很【简单】的一个问题,之前从来没有遇到过;第一反应是搜索Google,没有找到解决方案。木有办法,只好去看源码;看到源码后,很容易就能解决问题。还是记录一下此文。同时,告诫一下......
  • Tomcat目录介绍,常见的启动失败
    目录介绍:bin      专门用来存放Tomcat服务器的可执行程序conf     专门用来存放Tomcat服务器的配置文件lib       专门用来存放To......
  • 【转】VUE 组件之间的数据共享
              [email protected]                   ......
  • Java安全之Tomcat6 Filter内存马
    Java安全之Tomcat6Filter内存马回顾Tomcat8打法先回顾下之前Tomcat789的打法这里先抛开78之间的区别,在8中,最后add到filterchain的都是一个filterconfig对象Applica......
  • 验证码案例的实现---MyBatis+Session+Cookie
    展示验证码(jsp页面)首先,我们需要自己利用BufferedImage类去生成一张可以变换的验证码图片;之后,我们就可以利用这样一串代码去将验证码里面的内容获取到:这是一串测试代码:O......
  • 强制关闭Tomcat
    背景由于应用项目及其复杂,应用自己开启的线程在tomcat停止时没有关闭,便会导致tomcat进程没有终止。但是tomcat监听的端口却已经释放,因为执行shutdown.sh脚本时,tomcat自身......
  • Javaweb基础复习------Cookie+Session案例的实现(登录注册案例)
    Cookie对象的创建--Cookiecookie=newCookie("key","value");发送Cookie:resp.addCookie();获取Cookie数据:req.getCookie("","");Cookie不能直接存储中文需要进行转......
  • CORS跨域资源共享问题
    同源策略介绍同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源......
  • Nginx代理后端Tomcat
    拉取镜像并运行dockerpullnginx:1.23dockerpulltomcat:8dockerrun-dnginx:1.23dockerrun-dtomcat:8进入nginx容器安装vim命令并备份安装vim命令apt-get......
  • localstorage,sessionstorage和cookie的同异
    cookielocalstoragesessionstorage存储大小4K5M5M数据有效期cookie默认有效期非常短暂,存在于web浏览器会话期间,也可以手动设置永不失效,除非web应用主动......