Liferay Portal额外研究(三):IFrame Portlet地session丢失疑难处理

简介:        Liferay提供了一种非常的简单web应用整合和单点登陆的方式:Iframe Portlet。利用Iframe Portlet可以很容易将一个已经存在的web应用纳入,并且支持利用form的post或get方式,实现用户的登陆。        对于Liferay这样的机制没有任何问题,实现的也非常巧妙;但是对于很多web应用系统来说,使用Liferay IFrame Por

       Liferay提供了一种非常的简单web应用整合和单点登陆的方式:Iframe Portlet。利用Iframe Portlet可以很容易将一个已经存在的web应用纳入,并且支持利用form的post或get方式,实现用户的登陆。
 
       对于Liferay这样的机制没有任何问题,实现的也非常巧妙;但是对于很多web应用系统来说,使用Liferay IFrame Portlet的form方式实现登陆后,虽然可以成功登陆,但是在显示的新页面中,却发现用户信息丢失,或者更准确的说,是session丢失。
 
       其实,这种现象跟Liferay关系不大,而是应用本身决定的。事实上,所有的portal context的iframe 方式,都有可能发生这个情况。
 
       因为很多web应用系统,在执行Login操作的后,习惯性的选择redirect操作,这样会强制浏览器中的显示地址变更为转移的地址。事实上这是个很正确的做法,在正常境况下,不会有任何问题,而且还可以很好的防止页面刷新等所带来的问题。
 
       但是在Liferay的IFrame Portlet中,web应用这样的Redirect操作,造成了调转到新页面后,session变成了一个新的,从而造成放置在原有session中的login user信息丢失。
 
       跟踪并做了如下的一组测试(Liferay和webapp在不同的JVM环境下):
应用
位置
session id
(Liferay)
执行form post前
D03E1B828395EF5BCB1063A8290BD254
(APP_A)
Login操作
397BB3656E2A12A96CE3F16E0A89C607
(APP_A)
登陆后的新页面
58A1054C6EDE4A7D6CFA2FCDBB3E0736
       从上面可以明显看出来,redirect之后,web应用的新页面产生了新的sessionid      
 
       解决这个问题,有两种方式,这两种方式都依赖于被liferay portlet纳入的web应用自身。
       方式一:Login操作后,不采用Redirect方式,而是Dispatcher方式。
       方式二:Login操作后,依然采用redirect方式,但将当前的jsessionid赋予新的页面。
 
Dispatcher方式:
 
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
 
Redirect方式(保持同一个session):
      
response.sendRedirect(“
index.jsp;jsessionid=397BB3656E2A12A96CE3F16E0A89C607”)
       有一种情况下,无所谓是否采用Redirect方式,这就是在Liferay和webapp在同一个JVM环境下。

相关文章
|
3月前
|
数据安全/隐私保护 开发者 Ruby
【深度揭秘】Rails高手都不说的秘密:玩转URL映射,让你的Web应用瞬间高大上!
【8月更文挑战第31天】Rails中的路由机制负责将HTTP请求映射到应用内部逻辑。本文通过问答形式,结合示例代码详细解释了路由的作用、定义及使用方法。在`config/routes.rb`中定义的`resources :articles`会自动生成CRUD操作所需的标准RESTful路由。此外,还介绍了如何自定义非标准路由以及命名路由的生成与使用,帮助开发者更灵活地管理URL与应用逻辑间的映射关系,提升Rails应用的健壮性和可维护性。
32 0
|
应用服务中间件 API
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
Web阶段:第十六章:Cookie技术
Web阶段:第十六章:Cookie技术
Web阶段:第十六章:Cookie技术
|
Java 应用服务中间件 API
WEB核心【会话技术-session】第十六章
本文讲解会话技术中的session技术。
WEB核心【会话技术-session】第十六章
|
存储 前端开发 Java
|
应用服务中间件 容器 数据格式