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

Liferay 7 - set shared session attribute in Authenticator class

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

我知道这个话题:

问题是我无法在 Authenticator class 中检索请求(以及 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);

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

在我看来,您的情况有两个问题需要寻找,一个是您链接的 post 中建议的范围。

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

只有列入白名单的属性存在,并且应该在您的门户上配置这些属性-ext.properties。

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

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

示例 API 保存 expando 的调用:

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

更多细节你可以看这个post: Expandos