我有一个 Liferay 应用程序,其中用户有一个“会员计划”。当用户登录时,我需要检查他们的会员计划是否已过期并向他们显示警告消息。(会员计划独立于登录功能。即使他/她的会员计划已过期,用户仍然可以登录)。
我想创建一个登录后操作。但我无法MemberPlanLocalServiceUtil.isPlanExpired()
从此或我创建的任何其他挂钩访问我的服务构建器方法 ( )。
我应该使用什么方法来解决这个问题?这里需要一个ext插件吗?或者我可以做点别的吗?
可以使用applicationContext.xml来实现,在WEB-INF中创建一个applicationContext.xml,把所有的bean引用都放在里面。在 Web.xml 和监听器类中设置上下文参数。
上下文参数
<context-param>
<param-name>portalContextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
监听类
<listener>
<listener-class>com.liferay.portal.kernel.spring.context.PortletContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.liferay.portal.kernel.servlet.SerializableSessionAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.liferay.portal.kernel.servlet.HookContextListener</listener-class>
</listener>
作为参考,您可以查看这篇文章 http://www.liferay.com/zh/web/raymond.auge/blog/-/blogs/custom-velocity-tools-and-liferay-6-0
您将“登录后操作”添加到 MemberPlan-Portlet(插件)。为此,您需要将钩子添加到您的 portlet。portlet 应该扩展login.events.post=com.mypackage.MyLoginPostAction
,有关详细信息,请参阅
http://www.liferay.com/documentation/liferay-portal/6.1/development/-/ai/extending-and-overriding-%3Cem%3Eportal-properties-lt-e- 1 .
我最终解决了这个问题。(这是需要快速解决方案的情况之一,而且是一个肮脏的解决方案)
这就是我所做的
我添加了一个LoginAction
在其中设置会话属性的:
public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {
HttpSession session = request.getSession();
session.setAttribute("LIFERAY_SHARED_checkMemberExpiry", true);
}
然后,在主页上的 portlet 中,我检查是否设置了此会话属性,并在需要时显示我的警告消息。