http://my.oschina.net/huangcongcong/blog/521025
有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立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.
所以的需要一个tomcat下两个WEB之间通过session 共享数据
由于每个WEB应用程序都有一个唯一的一个ServletContext 实例对象,自己下面的所有的servlet 共享此ServletContext。
利用ServletContext 中的setAttribute() 方法把Session传递过去 然后在另外一个WEB程序中拿到session实例。
1: 修改Tomcat---conf----server.xml文件
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x mlValidation="false"></Host>
修改为:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x mlValidation="false">
<Context path="/项目A" reloadable="false" crossContext="true"></Context>
<Context path="/项目B" reloadable="false" crossContext="true"></Context>
</Host>
注意 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: 在项目A中,写入以下代码:
我们假定
项目A 为/myweb
项目B为 /w2
//以下内容用于测试同一tomcat下不同项目之间共享session
HttpSession session = req.getSession();
session.setAttribute("name", "xbkaishui");
session.setMaxInactiveInterval(6565);
ServletContext ContextA =req.getSession().getServletContext();
ContextA.setAttribute("session", req.getSession());
//测试
out.println("IN SessionRangleServlet name : "+session.getAttribute("name"));
3.在项目B中,写入以下代码取出Session
HttpSession session1 =req .getSession();
ServletContext Context = session1.getServletContext();
// 这里面传递的是项目a的虚拟路径
ServletContext Context1= Context.getContext("/myweb");
System.out.println(Context1);
HttpSession session2 =(HttpSession)Context1.getAttribute("session");
System.out.println("base传过来的user为:"+session2.getAttribute("name"));
然后重新部署就行了。
分享到:
相关推荐
linux.tomcat-session共享.redis.安装包
NULL 博文链接:https://rainbow702.iteye.com/blog/1312307
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
多个服务器部署Tomcat共享Session的方法,自己亲身测试
tomcat集群session共享
基于 Redis 的Tomcat Session共享。 对Git项目tomcat-redis-session-manager 做了简单修改。 使用方法,可以参考博客: http://blog.csdn.net/catoop/article/details/48603891
redis tomcat7 session共享
使用说明:请严格按照资源内的readme文档来说明部署,不要搞错版本,完美支持Tomcat8和Tomcat9等新版本Tomcat,仅支持JDK8以上版本JDK。
在网上找了好久,终于找到了可用的资源,本人亲自测试,绝对tomcat7下可用。
tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题
如何实现服务器集群session共享,redis用来tomcat共享。
完整tomcat8内含session共享包,亲自测试可以使用,有问题可以私聊。
包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar
Tomcat8+redis实现session共享 Tomcat8+redis实现session共享
tomcat session共享 redis
Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo
tomcat7集群实现session共享
tomcat集群session共享问题解决方案,以及应用到的相关资料
tomcat配置session共享,亲试过tomcat 7.0.82版本。提供了三个依赖的jar,拷贝到tomcat的lib下面。修改content.xml文件。里面有案例。
linux-tomcat+nginx解决session共享,linux-tomcat+nginx解决session共享,linux-tomcat+nginx解决session共享,