博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat session共享
阅读量:5914 次
发布时间:2019-06-19

本文共 2089 字,大约阅读时间需要 6 分钟。

hot3.png

有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立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文件

  
     修改为: 
    
      
  

注意 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"));

然后重新部署就行了。

转载于:https://my.oschina.net/huangcongcong/blog/521025

你可能感兴趣的文章
统计服务连接状况
查看>>
Android事件总线(三)otto用法全解析
查看>>
js数组实现不重复插入数据
查看>>
[译]使用 Siesta 处理 Swift 网络请求
查看>>
Android 中的子线程解析
查看>>
aidl跨进程通讯
查看>>
小程序上传图片到七牛云(支持多张上传,预览,删除)
查看>>
spring boot 整合mybatis 无法输出sql的问题
查看>>
为什么要用IPython/Jupyter?
查看>>
数据可视化之 Sankey 桑基图的实现
查看>>
项目实战-Api的解决方案
查看>>
前端面试题总结
查看>>
(三)从jvm层面了解线程的启动和停止
查看>>
SOA和微服务之间的区别
查看>>
IBM提出8位深度网络训练法,提速4倍同时保持高精度
查看>>
苹果发布Core ML 2
查看>>
“智能云”战略新品震撼发布,开发者如何快速上手?
查看>>
华为吴晟:分布式监控系统的设计与实现
查看>>
[deviceone开发]-do_Webview的基本示例
查看>>
亚马逊Alexa借助神经网络生成播音员声音
查看>>