我需要在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);
你能推荐一些解决方案吗?
在我看来,在您的案例中您需要查找两个问题,一个是您链接的帖子中建议的范围。
第二个问题是,如果启用了网络钓鱼防护,会话属性通常不会在身份验证管道中存活。
只有列入白名单的属性才能生存,并且应在portal-ext.properties上配置这些属性。
我们有一个类似的用例。我们使用expandos / custom字段来保存在用户身份验证期间使用外部Web服务调用检索的用户信息,无论是在SSO的自定义自动登录过滤器还是自定义登录portlet中。
存储的expandos可以通过自定义模块中的api调用来检索。
用于保存expando的API调用示例:
user.getExpandoBridge().setAttribute("example", "value", false);
有关详细信息,请查看此帖:Expandos