`

同一tomcat 下的两个应用共享 Session (SSO)

阅读更多

http://www.verydemo.com/demo_c199_i2915.html

http://wenku.baidu.com/view/ea593c1a650e52ea5518981b.html

http://blog.china.com.cn/dengshucai/art/485885.html  (集群)

http://www.linuxidc.com/Linux/2011-04/35275.htm

http://blog.csdn.net/mixer_a/article/details/7555389

 

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

然后重新部署就行了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics