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