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的菜单权限也获取到了
项目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的菜单权限也获取到了
相关文章推荐
- 使用session在不同页面之间传递参数,sqldatasource按条件查询
- 在两个ASP.NET页面之间传递变量 (QueryString,Session和Server.Transfer)
- 两个不同的项目间页面的跳转总结
- 在两个ASP.NET页面之间传递值[querystring,session,server.Transfer]
- [网络收集]在两个ASP.NET页面之间传递变量 (QueryString,Session和Cookies Application)
- 两个不同HTML页面之间参数传递
- 关于在两个jsp页面之间传递值的问题
- 两个JSP页面之间如何传递一个对象?比如一个LIST或者HASHMAP?以及为什么有时候REQUEST.GETATTRIBUTE("NAME")取不到值?
- JavaWeb项目之电话本,两个版本,以及总结反思
- 两个不同编码的页面之间的参数传递( 解码 )
- [置顶] 关于不同对象且属性名称也不一样的两个对象之间的复制以及动态对象生成
- 在两个ASP.NET页面之间传递值[querystring,session,server.Transfer]
- 在两个ASP.NET页面之间传递值[querystring,session,server.Transfer][转]
- 关于不同页面之间实现参数传递的几种方式讨论
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结 .
- 关于Iframe之间以及与父窗体的值传递
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- Tomcat 服务器配置及远程调试和不同web项目session共享方法以及设置TOMCAT的内存
- php两个页面之间传递数据
- 两个Activity之间传递数据的全部方法以及Parcelable接口的用法