javaweb关于两个项目session传递以及不同项目之间页面传值的总结

项目中业务系统和一个cms系统要做session共享,此为个人工作中的总结,算不算SSO我也不知道,我要的是实现功能。
项目A和项目B是tomcat下两个不同的项目,项目A是业务系统,项目B是cms系统,要实现的目标是 A登录进来 跳转到B B获取到A的session信息
因为A登录后在A的struts.xml不能直接跳转到B的页面,所以在A里面加了jsp页面(在此页面中实现跳转到B页面),跳转到此页面。
在此jsp页里获取到session的信息后通过c:redirect 加参数进行传参,把session里需要的信息分别传过去:





在B的页面里通过获取url的路径和参数得到传过来的url字符串,这里要注意,前面传过来的参数如果是中文 获取到的参数会是类似%e9%9b%86%e5%9b%a2%e6%9c%ac%e9%83%a8的乱码,
必须通过decodeURI()方法转码。

现在跳转到B的页面了,下面实现获取A的session信息:
首先在tomcat server.xml  标签下 配置:


在A的登录action里:
HttpSession session2 = request.getSession();
session2.setAttribute("sessionDto",A的session信息);
ServletContext ContextA =session2.getServletContext();
ContextA.setAttribute("session", session2);

在B的web-inf/web.xml里写一个filter过滤器:

    sessionFilter
    com.XXX.util.sessionFilter
   

   
     sessionFilter
     /*
 

用于在跳转到B时 任何时候都能获取到A的session。
 在doFilter方法里:
  HttpSession session =request.getSession();
  ServletContext Context = session.getServletContext();
  ServletContext Context1= Context.getContext("/项目A"); 
  if(Context1 !=null && !Context1.equals("")){ 
   HttpSession session1 =(HttpSession)Context1.getAttribute("session");
   request.setAttribute("sessionDto", session1.getAttribute("sessionDto"));
   }


由于在B的html页面里要获取到A的菜单权限,所以在B的页面里通过iframe的方式调B里面的一个jsp页,这个jsp页专门用来获取菜单权限,

在B的html页里获取iframe页里的值:
var userId=frames['getSessionIframe'].document.getElementById("userid").value;
这样就把A的菜单权限也获取到了

你可能感兴趣的:(Java,web)