java - 有没有办法访问在 openid 连接过程中设置的会话数据?
问题描述
当我尝试访问 Liferay 门户会话数据时,它似乎不包含由内部 Liferay 门户进程存储的数据。是否可以访问存储在OpenId-Connect
登录过程中的令牌?
基本上,我的任务是寻找可以实现门户的软件,该门户显示多个不同内部平台的 API 端点提供的功能更容易。目前,我正在研究 Liferay Portal 7.2。对于登录,我使用了 Liferay 门户的 OpenId-Connect 实现,因为身份验证由内部登录服务器处理。在 OpenID-connect 登录过程结束时返回的访问令牌是一个 API 令牌,然后我想用它来访问各种 API 端点。
目前我得到这样的会话
HttpSession httpSession = PortalUtil.getHttpServletRequest(actionRequest).getSession();
在查看 OpenId-Connect 实现之后
com.liferay.portal.security.sso.openid.connect.internal.OpenIdConnectServiceHandlerImpl
然后我尝试像这样获取会话对象。
Object openIdConnectSessionObject = httpSession.getAttribute("OPEN_ID_CONNECT_SESSION");
但在这一点上,openIdConnectSessionObject
总是null
。我已经读到不同的范围有不同的会话,但是有没有办法访问这些数据,或者 Liferay Portal 可能并不适合我正在尝试做的事情。
解决方案
有一个细节值得注意:
PortalUtil.getHttpServletRequest(actionRequest)
将允许您访问PortletRequest
符合接口的人造对象,HttpServletRequest
以防您需要某些 API 来获取来自 servlet(而不是门户网站)世界的请求。
PortletRequest 仅包含指向特定 Portlet 的参数(和会话信息),没有其他内容。
如果您对实际的底层 HttpServletRequest 感兴趣,您将需要PortalUtil.getOriginalServletRequest
HttpServletRequest 作为输入。你会得到你已经探索过的方式。最后,您将拥有
session = PortalUtil.getOriginalServletRequest(
PortalUtil.getHttpServletRequest(actionRequest)).getSession();
获取实际服务器的会话。
我没有检查这是否有用,甚至没有检查您所陈述的问题的可取解决方案,但它可能会让您进一步解决您的问题。
推荐阅读
- python - 如何覆盖 NaN 值?
- android - 如何将 BottomSheetBehavior 与 BottomSheetDialogFragment 集成
- google-apps-script - 在 google 邮件 api 中更改 sendAs 电子邮件地址
- javascript - SCRIPT5007:无法获取未定义或空引用的属性“toLowerCase”
- ios - Wrapper 不会将其内在内容大小作为其子项和它们之间的约束的总和
- c# - AES-256-CTR 通过 C# 加密和在 JS 中解密
- c# - 在 UWP 中将文件夹移动到另一个位置的最快方法
- python - Python Requests.get() 不适用于多处理 pool.map
- python - django.urls.exceptions.NoReverseMatch
- sonos - 是否可以更改向用户显示的无法播放错误 - Sonos Music API