当我尝试访问Liferay Portal会话数据时,它似乎不包含由内部Liferay Portal进程存储的数据。是否可以访问存储在OpenId-Connect
登录过程中的令牌?
基本上,我的任务是查找软件,这可以使门户的实现变得更容易,该门户显示由多个不同内部平台的API端点提供的功能。目前,我正在关注Liferay Portal 7.2。对于Login,我使用了Liferay Portal的OpenId-Connect实现,因为身份验证是由内部Login服务器处理的。在OpenID-connect登录过程结束时返回的访问令牌是一个API-令牌,然后我想使用它来访问各种API-Endpoint。
目前我得到的会话如下所示
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可能并不真正适合我正在尝试做的事情。
发布于 2019-08-19 17:26:28
有一个细节值得注意:
PortalUtil.getHttpServletRequest(actionRequest)
将为您提供对遵守HttpServletRequest
接口的人工PortletRequest
对象的访问权限,以防您需要用于某些期望来自servlet而不是门户世界的请求的HttpServletRequest
。
PortletRequest只包含指向特定portlet的参数(和会话信息),不包含其他内容。
如果您对实际的底层HttpServletRequest感兴趣,则需要PortalUtil.getOriginalServletRequest
,它接受HttpServletRequest作为输入。你将会以你已经探索过的方式得到它。最后,你会有
session = PortalUtil.getOriginalServletRequest(
PortalUtil.getHttpServletRequest(actionRequest)).getSession();
来获取实际服务器的会话。
我还没有检查这是否有用,甚至不是你所说的问题的可取解决方案,但它可能会让你在解决问题上走得更远。
https://stackoverflow.com/questions/57552754
复制相似问题