J2EE同域中跨项目session共享实现
1、 背景
一个tomcat下跑两个web项目:appA,appB
2、 目的
appA项目中的session设置值能被appB项目获取,反之亦然。
3、 实现思路(以下假设项目appA的session被项目appB共享获取)
1) 设置servlet容器(即tomcat)全局变量,封装项目的session对象集合(是对象,非属性值),一个项目一个全局变量,便于其他项目能获取此全局变量。使用ServletContext对象;
2) 配置servlet容器各项目上下文允许交叉访问,即tomcat\conf\server.xml文件;
3) Session对象集合使用map封装,map集合对象设置进ServletContext全局变量中;
4) 设置Cookie对象,域设置为“/”(即根目录,不能是/appA),保存各登陆用户的sessionID;便于在map集合中能得到该id对应的session对象;
5) 项目appB中利用容器的ServletContext对象获得map集合;
6) 项目appB中读取用户端使用appA项目设置的Cookie集合,找到设置的cookie,得到appA设置的sessionID;
7) 利用从cookie中获得的sessionID遍历map集合,得到appA项目中的session对象;
8) 项目appB完成对项目appA的session共享。
4、 主要代码及设置(以纯jsp方式实现)
1) server.xml
2) 项目结构
3) 项目appA设置session及cookie
4) 项目appB从cookie间接获得appA的session对象及值
5) 效果图
用户1:user_1
用户2:user_2
完成session共享(以上IE不同用户均使用自己的IE)。
作者:xcg9593