在 liferay portlet 和 servlet 之间共享会话

Share Session between liferay portlet and servlet

我试图在同一个 WAR.

中共享 liferay portlet 和 servlet 运行 之间的会话

我在 LoginPostAction(挂钩)中像这样设置属性:

@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' 保持为空。

我做错了什么?

感谢

简单:LoginPostAction 由 Liferay 处理(即使技术上在您的 webapp 中实现 context/classloader。但是,如果您查看 httpServletRequest 的上下文路径,它是 Liferay 的。

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

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

注意:虽然实现 portlet 将使您能够访问 HttpServletRequest(通过 PortalUtil),但由于上述原因,不鼓励这样做。但由于我不知道您要实现的目标,这将是您在问题中提供的代码的快速修复的一部分。