Liferay的SessiionListner功能如何实现

在liferay中 如果想自己配置portlet中的web.xml 增加个sessionlistener。并写对应的类的话,并不会生效。

解决方案是在ext项目中 覆盖portal.properties中的属性

servlet.session.destroy.events

servlet.session.create.events

在后面追加自己的实现类。在自己的实现类中继承SessionAction,继承run方法 实现自己的逻辑。

如果在hook项目中来做的话会出现ClassNotFoundException.

如果把实现类写在portlet中 再把jar包放在ext项目中的话一样会报这个异常。

在不同的war包之间的session的attribute是默认不共享的。只有以portal.properties中以这行的配置的值中的任意一个开头的attribute名的值才会被不同 war的session共享

session.shared.attributes=COMPANY_,LIFERAY_SHARED_,org.apache.struts.action.LOCALE,PORTLET_RENDER_PARAMETERS_,PUBLIC_RENDER_PARAMETERS_POOL_,USER_

例如 在war1工程中 session.setAttribute(“,LIFERAY_SHARED_k_custom”,”aaa”);

在war2 工程中的session.getAttribute(“,LIFERAY_SHARED_k_custom”);就可以取到值为aaa的字符串了。