Liferay 7无法设置全局会话属性

Liferay 7无法设置全局会话属性,liferay,liferay-7,Liferay,Liferay 7,我正在尝试设置会话属性[HTTP或Portlet会话],以便全局访问它(通过门户)。但是在获取会话属性时,它会返回null而不是实际值 设置会话属性: 在不同的Portlet中获取会话属性: 我们在使用LR7.0时遇到了相同的问题。我不确定那是虫子还是什么。但作为一种解决办法,我们做了些什么。我们正在进行原始会话 HttpServletRequest httpRequest=PortalTil.getOriginalServletRequest(PortalTil.getHttpServletR

我正在尝试设置会话属性[HTTP或Portlet会话],以便全局访问它(通过门户)。但是在获取会话属性时,它会返回null而不是实际值

设置会话属性: 在不同的Portlet中获取会话属性:
我们在使用LR7.0时遇到了相同的问题。我不确定那是虫子还是什么。但作为一种解决办法,我们做了些什么。我们正在进行原始会话

HttpServletRequest httpRequest=PortalTil.getOriginalServletRequest(PortalTil.getHttpServletRequest(renderRequest)); HttpSession session=httpRequest.getSession(); session.setAttribute(“testAttr”、“hi”)


希望有帮助

这不是一个bug!Liferay是一个portlet容器,在portlet规范中,每个portlet都是具有不同会话的不同上下文。您试图在一个portlet会话中保存数据,并在另一个portlet会话中恢复数据,这是不正确的。Liferay提供了获取门户全局会话的方法:

        PortalSessionThreadLocal.getHttpSession();
此会话可以从门户的每个portlet中检索,但重要的是指定在集群环境中强烈不鼓励在全局会话中保存数据,这主要是因为如果您从仅存在于portlet中的类中保存实例,则可以从不知道该类的其他portlet中获取ClassNotFoundException。建议仅在保存基本数据时使用全局会话

@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=IPC Receiver",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=IPC_Receiver Portlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.resource-bundle=content.Language",
        "com.liferay.portlet.private-session-attributes=false",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)
public class ipcreceiverPortlet extends MVCPortlet 
{
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException 
    {
        //HttpSession
         HttpServletRequest httpreq = PortalUtil.getHttpServletRequest(renderRequest);
         HttpSession session = httpreq.getSession();
         String name = (String)session.getAttribute("transfer");
         System.out.println("Session value through HttpSession:"+name);

         //PortletSession
         PortletSession portletsession = renderRequest.getPortletSession();
         String userName = (String) portletsession.getAttribute("sendvalue",PortletSession.APPLICATION_SCOPE);
         System.out.println("\nSession value through PortletSession:"+userName);
    }
}
        PortalSessionThreadLocal.getHttpSession();