我正在尝试设置可跨页面操作的会话,我能够使用此代码设置会话
HttpSession session1 = request.getSession(false);
String foo = (String) session1.getAttribute("password");
session1.setAttribute("password","authenticated");
out.println(foo);
此代码是用自定义JSP钩子编写的( Journal_content / view.jsp )
我还检查了会话是否保存在浏览器上,它就在那里。当我从一个页面转到另一个页面时,我无法阅读会话,所以它要求我输入密码。
有谁能告诉我如何在Liferay中制作这个?。
答案 0 :(得分:3)
我认为您可以使用PortletSession
代替HttpSession
,如下所示:
PortletSession portletSession = renderRequest.getPortletSession();
portletSession.setAttribute("password", "authenticated", PortletSession.APPLICATION_SCOPE);
...并且用于获取属性:
String pwd = (String) portletSession.getAttribute("password", PortletSession.APPLICATION_SCOPE);
由于liferay的OOTB portlet在<private-session-attributes>false</private-session-attributes>
中定义liferay-portlet.xml
,因此上述代码与整个门户共享session
。
liferay-portlet.xml
DTD关于使用<private-session-attributes>
的小注释:
如果portlet不与门户共享会话属性,请将
private-session-attributes
值设置为true。默认值是true。 portal.properties中的属性session.shared.attributes
指定即使private-session-attributes值为true也共享哪些会话属性。
如果有帮助,请告诉我。
答案 1 :(得分:0)
我已经发布了我的答案here,以便从Hooks到Portlet共享对象。
如果要在portlet之间共享对象,则必须在原始portlet的liferay-portlet.xml文件中设置false。