在liferay portlet和servlet之间共享会话

时间:2015-02-06 08:09:07

标签: java session servlets liferay portlet

我正在尝试在同一个WAR中运行liferay portlet和servlet之间的会话。

我在LoginPostAction(Hook)中设置了这样的属性:

@Override
public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {

    Gebruiker g = new Gebruiker();
    request.getSession().setAttribute("gebruiker", gebruiker);

}

尝试通过AJAX请求在我的servlet中获取此Gebruiker对象:

@RequestMapping(value="/haalContactGegevens", method = RequestMethod.POST)
public @ResponseBody ContactGegevensMessage getContactGegevens(HttpServletRequest request, HttpServletResponse response)  {

    Gebruiker gebruiker = (Gebruiker)request.getSession(true).getAttribute("gebruiker");
}

但是这里我的'Gebruiker-object'保持为空。

我做错了什么?

THX

1 个答案:

答案 0 :(得分:2)

简单:LoginPostAction由Liferay处理(即使在您的webapp的上下文/类加载器中已经技术实现。但是,如果您查看httpServletRequest的上下文路径,它是Liferay&#39 ; s。

当您在自己的webapp中实现servlet时,它将拥有自己的会话,与Liferay无关。

您应该实现一个portlet并利用其serveResource生命周期方法来处理Ajax请求 - 这将使您成为整个门户环境的一部分。但是,您还应该尽量减少Http级别会话的使用:它很快就会成为内存泄漏的来源。

注意:实现portlet时,您可以访问HttpServletRequest(通过PortalUtil),但由于上面给出的原因,不鼓励这样做。但由于我不知道您要尝试实现的目标,因此这将是您在问题中提供的代码的quickfix的一部分。