您的位置:首页 > 编程语言 > Java开发

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

2013-10-02 00:49 561 查看
项目中业务系统和一个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里需要的信息分别传过去:

<c:redirect url='http://localhost:8080/项目B/XXX.html'>

<c:param name="orgName" value="<%=sessionDto.getOrgName()%>"></c:param>

<c:param name="deptName" value="<%=sessionDto.getDeptName()%>"></c:param>

<c:param name="personName" value="<%=sessionDto.getPersonName()%>"></c:param>

</c:redirect>

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

必须通过decodeURI()方法转码。

现在跳转到B的页面了,下面实现获取A的session信息:

首先在tomcat server.xml  </Host>标签下 配置:

<Context docBase="..\webapps\项目A" path="/A"  reloadable="true" crossContext="true" />

<Context docBase="..\webapps\项目B" path="/B"  reloadable="true" crossContext="true"/>

在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过滤器:

<filter>

    <filter-name>sessionFilter</filter-name>

    <filter-class>com.XXX.util.sessionFilter</filter-class>

   </filter>

   <filter-mapping>

     <filter-name>sessionFilter</filter-name>

     <url-pattern>/*</url-pattern>

 </filter-mapping>

用于在跳转到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页专门用来获取菜单权限,

<iframe height="100" width="100" id="getSessionIframe" src="http://localhost:8080/项目A/pages/login/getSession.jsp" style="display:none;"></iframe>

在B的html页里获取iframe页里的值:

var userId=frames['getSessionIframe'].document.getElementById("userid").value;

这样就把A的菜单权限也获取到了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐