Weblogic Server中的session共享

最近做一个商户接口,发现同一weblogic下不同应用;appA应用的jsp与appB应用的servletsession对象不能共享;苦想冥想,终于找到一个解决方案。

         案例背景是这样的:

         客户要调用我写的这个接口进行帐户验证,其操作流程如下:

1.        访问 appA(暂定为我的应用名) 中的一个jsp页面authCode.jsp,生成一个验证码给客户,同时生成session_id,现在暂定其值为 session1

2.        客户填定待验证的帐户信息和验证码;

3.        客户发送请求到appA 下的一个 Servlet 进行帐户验证, Servlet中会对验证码进行判断,如客户传送过来的的验证码错误将直接报错;与之比较的验证码从session中取。

 

但测试的时候发现前后两次请求(取验证码和帐户验证)的session_id不一致;因为以前我做这个接口的时候也是两个请求,不过帐户验证请求是发送到一个.doURL,这次改动一则是需求变动,另外也想将帐户验证用统一的对外接口来写,便于维护。既然以前没有session_id 不一致的问题,说明同一Weblogic Server的不同应用,它们各自维护自己的session,并且不能跨应用访问其它应用下的session所以在Servlet(接口Servlet) 中不能直接通过 request.getSession得到org.apache.struts.action.ActionServlet这个Servlet 下的session

 

但最终这些Servlet 是在同一个应用下,所以它们可以在ServletContext下可以共享Object,所以将authCode.jsp中生成的session作为对象放在ServletContext中即可。

authCode.jsp代码片断:

ServletContext context = getServletConfig().getServletContext();

context.setAttribute("gauApp", session);

 

Servlet(接口入口) 代码片断:

ServletContext context =  getServletConfig().getServletContext();

    ServletContext contextGau = context.getContext("/gau");

HttpSession session = (HttpSession)contextGau.getAttribute("gauApp");

 

按以上方法即可实现同一Weblogic Server下不同应用共享session对象。 

 

但如此共享还有一个问题,就是gauApp对象可能会不断被更新,所以必须在application下以key,value的方式存放对象,key唯一;理所当想的想到这个key就是session_id了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值