基于Liferay Portal开发ajax应用时,如果长时间操作一个应用会发生用户登录超时的情况,在单应用的情况下,客户端每次提交请求时,服务端都会根据sessionid更新客户端用户的session状态。
但是在portal中,ajax的处理类不能继承PortletAction类,如果继承PortletAction来处理ajax请求,response写回的是整个页面;在进行了自己的处理以后portal已经强制对response进行了回写操作。Liferay 5.1.2版本中的处理是处理类继承com.liferay.portal.struts.AJAXAction类,但是AJAXAction也是直接继承自struts 1的org.apache.struts.action.Action类,AJAXAction类中只不过是添加了
public abstract String getText(
ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws Exception;
方法来让我们自己设置回写的xml或text数据,com.liferay.portal.struts.JSONAction类中的情况也差不多。这些处理都没有经过portal容器,自然portal就不会更新用户的session状态,出现用户登录超时的情况也就在所难免。
大概看了一下,Liferay的单点登录实现,一般单点登录的实现都借助于客户端的cookie,所以这不单单是服务器端的问题。Liferay Portal中客户端会用脚本JavaScript去检测用户的session时间,在每一次刷新页面的时候更新客户端用户在cookie中的登录时间,同时也通知服务器端更新用户的session状态。可以在session超时的警告页面html\common\themes\session_timeout.jsp中扩展登录时间,扩展时间在portal-impl包的portal.properties文件中设置。可以看到在session_timeout.jsp页面中扩展session时间的代码:
Liferay.Session.init(
{
autoExtend: <%= PropsValues.SESSION_TIMEOUT_AUTO_EXTEND %>,
timeout: <%= sessionTimeout %>,
timeoutWarning: <%= sessionTimeoutWarning %>,
redirectOnExpire: <%= PropsValues.SESSION_TIMEOUT_REDIRECT_ON_EXPIRE %>
}
);
这样我们在每一次ajax请求处理以后都添加一段扩展session时间的代码,就可以解决开始时提到的session超时问题。你可以这样添加:
if (Liferay.Session._stateCheck) {
window.clearTimeout(Liferay.Session._stateCheck);
Liferay.Session._stateCheck = null;
}
Liferay.Session.init({autoExtend:false, timeout:Liferay.Session._timeout, timeoutWarning:Liferay.Session._warning});
先清空原有的session计时器,之后重启Liferay的session计时。
但是这肯定不是好方法,你需要在每一个用到ajax技术的地方添加一段这样的代码或js方法;同时对一些特殊情况也不容易处理,比如你使用ajax技术异步启动一个服务器端的任务处理线程,一般情况下你可以进行其他操作,一段时间以后来查看线程任务是否执行完成。但是如果你一直停留在这个页面等待任务执行完成,session设置的时间是30分钟,你的任务执行了31分钟,你还没有看到执行结果就得重新登录,这种情况下就添加必要的特殊处理。
如果你也在使用Liferay,对这个问题有更好的处理方法,欢迎回复讨论!
分享到:
相关推荐
通过上述步骤,我们可以实现基于serverResource的Ajax请求,在Liferay中创建动态、交互的Web应用。同时,阅读提供的"JSR268详解.docx"文档可以帮助你更好地理解JSR268(Portlet 2.0 API)在Liferay中的应用,它与...
在Liferay 6中,使用Ajax技术来处理Portlet请求是一种常见的优化用户交互的方法。Ajax(Asynchronous JavaScript and XML)允许部分页面更新,无需整个门户页面的刷新,从而提升了用户体验,尤其是在Portlet环境下。...
该文档是在Liferay5.1.2中应用struts的示例,使用时只要现创建一个portlet,然后解压缩并利用该文档中相同的部分将其覆盖,然后build,deploy后,即可看到其结果,安装使用都及其方便。
Portlets是Liferay中的应用程序单元,可以是动态网页、数据表或者交互式表单。6.2版支持JSR-286标准,开发者可以使用Java、FreeMarker、Velocity或JSP来编写portlet代码。 4. **主题与布局** Liferay允许定制主题...
在IT行业中,Liferay是一款广泛使用的开源企业级Portal框架,它允许开发者构建高度可定制的企业级应用程序。本主题聚焦于如何利用Liferay开发portal应用,特别是通过插件的方式来实现。以下将详细介绍Liferay插件...
在Liferay Portal中,Portlet是可重用的Web组件,用于展示动态内容和服务。随着时间的推移,项目中可能会积累许多不再使用的Portlet代码,这不仅会占用服务器资源,还可能影响系统的性能和维护效率。因此,定期清理...
2. **Portlet开发**:Portlet是Liferay中的基本展示单元,类似于Web应用中的MVC组件。开发者需要掌握如何创建、配置和部署Portlet,包括MVCPortlet、JSR286 Portlet和Freemarker或JSP模板的使用。 3. **服务构建器...
Portlets是Liferay中的核心组件,可以视为网页上的小型应用。通过学习这份文档,开发者能够理解portlet生命周期、渲染机制以及如何利用MVC Portlet模式进行开发。此外,文档还涵盖了portlet与Liferay服务的集成,如...
在Liferay 6中,开发工作主要围绕Portlets进行,Portlets是Liferay中的应用程序单元,它们可以嵌入到门户页面上提供特定的功能。"plugins开发指南2-开发一个简单的portlet.pdf"将引导初学者了解如何创建并部署基本的...
完成上述步骤后,你将拥有一个使用Liferay 5.2.3和CAS 3.0.5实现的SSO系统,用户可以无缝地在不同应用之间切换,而只需登录一次。这个配置对于多应用的企业环境特别有用,可以提高用户体验,同时简化身份验证管理。
根据给定的文件信息,以下是对"Liferay应用安全配置手册"相关知识点的详细解析: ### Liferay应用安全配置手册概览 #### 编写目的 该手册旨在为项目团队提供全面的指南,涵盖应用安全的基本配置流程,确保系统的...
在这个项目中,我们将探讨如何使用CAS 4.2.4版本与Liferay 6.2及以上版本的数据库集成,以便在用户登录时通过验证Liferay的用户表来确认用户身份。 Liferay是一款开源的企业级门户平台,提供内容管理、社交网络和...
在实际应用中,Liferay的SSO功能可能还需要与其他身份管理解决方案,如LDAP(轻量级目录访问协议)或Active Directory集成,以利用已有的用户数据库。这些集成通常涉及到配置Liferay的用户目录服务,确保它们能够与...
- **重用现有Web应用**:对于已有的Web应用,可以通过特定配置使其成为Liferay中的Portlet或Gadget。 ##### 2. 技术支持 Liferay 6.0 支持以下技术栈: - **Java**:主要开发语言。 - **JavaScript/Ajax**:前端...
其次,《Liferay 用户开发接口》深入解析了Liferay中的用户管理和权限控制机制。这包括用户账户的创建、管理,角色和组的设定,以及基于角色的访问控制(RBAC)。开发者将了解到如何定制用户界面,实现个性化用户...
`test-portlet`可以利用布局上下文将数据存储在session中,其他portlet可以通过读取该session来访问这些数据。 6. **门户上下文(Portal Context)**:Liferay提供了一个全局的门户上下文,允许所有portlet访问门户...
- **Session 对象**:管理用户的会话信息。 - **Preference 对象**:存储 Portlet 的个性化设置。 ##### 3.4 编写自己的 Portlet 类 - **开发环境**:确保开发环境已经准备好,包括安装 JDK、Tomcat 或其他应用...
在Liferay中整合GWT(Google Web Toolkit)是一项常见的任务,尤其对于开发复杂的企业级Web应用来说,这种集成可以利用GWT的强大力量来创建高性能的用户界面,同时利用Liferay的门户功能和社区特性。这篇博文提供了...