我需要在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);
您能推荐我一些解决方案吗?
答案 0 :(得分:1)
在我看来,要解决的问题有两个,一个是链接文章中建议的范围。
第二个事实是,如果启用了网络钓鱼防护,则会话属性通常不会在身份验证管道中继续存在。
只有白名单中的属性可以保留,这些属性应该在portal-ext.properties中进行配置。
答案 1 :(得分:0)
我们有一个类似的用例。我们使用expandos / custom字段来保留用户身份验证期间通过外部Web服务调用检索到的用户信息,这些信息是在SSO的自定义自动登录过滤器或自定义登录Portlet中进行的。
expandos一旦存储,可以通过自定义模块中的api调用进行检索。
保存扩展集的API调用示例:
user.getExpandoBridge().setAttribute("example", "value", false);
有关更多详细信息,请参见以下文章: Expandos