Liferay 7-在Authenticator类中设置共享会话属性

时间:2019-02-14 13:13:18

标签: java tomcat liferay

我需要在Liferay的 Authenticator (key=auth.pipeline.pre)中设置会话。在这个Authenticator类中,我需要通过另一个Web服务检查凭据,并在会话中设置一些应与其他Portlet共享的属性。

我知道这个话题:Liferay 7 Shared Session Attributes

问题是我无法在Authenticator类中检索请求(也包括portletRequest)。

我尝试使用PortalSessionThreadLocal这样的解决方案:

String sharedKey = "LIFERAY_SHARED_" + key;
HttpSession session = PortalSessionThreadLocal.getHttpSession();
session.setAttribute(sharedKey, bean);

但是我无法像这样通过另一个portlet来检索此会话属性:

key = "LIFERAY_SHARED_" + key;
HttpSession session = PortalSessionThreadLocal.getHttpSession();
Object bean = session.getAttribute(key);

您能推荐我一些解决方案吗?

2 个答案:

答案 0 :(得分:1)

在我看来,要解决的问题有两个,一个是链接文章中建议的范围。

第二个事实是,如果启用了网络钓鱼防护,则会话属性通常不会在身份验证管道中继续存在。

只有白名单中的属性可以保留,这些属性应该在portal-ext.properties中进行配置。

答案 1 :(得分:0)

我们有一个类似的用例。我们使用expandos / custom字段来保留用户身份验证期间通过外部Web服务调用检索到的用户信息,这些信息是在SSO的自定义自动登录过滤器或自定义登录Portlet中进行的。

expandos一旦存储,可以通过自定义模块中的api调用进行检索。

保存扩展集的API调用示例:

user.getExpandoBridge().setAttribute("example", "value", false);

有关更多详细信息,请参见以下文章: Expandos