同一Tomcat下不同Web应用之间共享Session会话 2014-03-21
09:38:37 分类: Java技术
实现同一Tomcat下两个WEB应用之间通过session 共享数据。
查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:
If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification implementations. If not specified, this attribute is set to false.
A side effect to setting this to true, is that if Tomcat creates a new session it will attempt to use the cookie session id if supplied by the client.
设置为true 发现没有用,在网上搜了一下方法,基本是这样的:
由于每个WEB应用程序都有一个唯一的一个ServletContext 实例对象,自己下面的所有的servlet 共享此ServletContext,利用ServletContext 中的setAttribute() 方法把Session 传递过去,然后在另外一个WEB程序中拿到session实例。
1、修改Tomcat---conf----server.xml文件 把
注意 crossContext 属性: crossContext: Set to true if you want calls within this application to ServletContext.getContext() to successfully return a request dispatcher for other web applications running on this virtual host. Set to false (the default) in security conscious environments, to make getContext() always return null. 设置为true,说明你可以调用另外一个WEB应用程序,通过ServletContext.getContext() 获得 ServletContext 然后再调用其getAttribute() 得到你要的对象。 2、在 Project_A 中,写入以下代码: //以下内容用于测试同一tomcat下不同项目之间共享session HttpSession session = req.getSession(); session.setAttribute(\session.setMaxInactiveInterval(1800); ServletContext ContextA =req.getSession().getServletContext(); ContextA.setAttribute(\//测试 out.println(\ 3、在 Project_B 中,写入以下代码取出Session HttpSession session1 = req .getSession(); ServletContext Context = session1.getServletContext(); // 这里面传递的是 Project_A 的虚拟路径 ServletContext Context1= Context.getContext(\System.out.println(Context1); HttpSession session2 =(HttpSession)Context1.getAttribute(\System.out.println(\传过来的user为:\ 然后重新部署。