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

问题描述 投票:1回答:2

我需要在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);

你能推荐一些解决方案吗?

java tomcat liferay
2个回答
1
投票

在我看来,在您的案例中您需要查找两个问题,一个是您链接的帖子中建议的范围。

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

只有列入白名单的属性才能生存,并且应在portal-ext.properties上配置这些属性。


0
投票

我们有一个类似的用例。我们使用expandos / custom字段来保存在用户身份验证期间使用外部Web服务调用检索的用户信息,无论是在SSO的自定义自动登录过滤器还是自定义登录portlet中。

存储的expandos可以通过自定义模块中的api调用来检索。

用于保存expando的API调用示例:

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

有关详细信息,请查看此帖:Expandos

© www.soinside.com 2019 - 2024. All rights reserved.