我正在尝试为liferay 开发一个portlet。
如何访问当前登录用户的用户名和密码(以及 liferay 拥有的其他数据)?
我还希望能够在用户更改密码时执行一些代码。
您可以通过调用对象getRemoteUser()
来获取用户 ID 。PortletRequest
这是由 JSR-168 定义的,因此它是跨门户兼容的。
获得 ID 后,您可以通过调用getUserById()
(Liferay 特定服务)获取附加信息。这是 Portlet API 规范未涵盖的内容,因此它将您锁定在 Liferay 中。
Liferay 特定的东西,这里是一个代码示例,要编写在您的 Portlet 类中以检索用户:
ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
User user = themeDisplay.getRealUser(); // it gives you the actual Logged in User
//you can also use
// User user = themeDisplay.getUser(); // this would fetch the User you are impersonating
long userId = user.getUserId();
String userName = user.getEmailAddress();
或者;
long userId = themeDisplay.getRealUserId(); // themeDisplay.getUserId();
User user = UserLocalServiceUtil.getUser(userId);
模拟用户:
Liferay 有一个概念,即管理员(或具有正确权限集的人)可以模拟门户的特定用户。通过这个,他们可以看到门户在该用户眼中的样子。
当用户更改密码时执行代码: 一种方法是创建一个钩子插件并通过扩展 UserLocalServiceWrapper 类来覆盖服务。然后检查密码更改并在您的自定义类中执行您的代码。
希望这可以帮助。
或者你可以只使用javascript:
Liferay.ThemeDisplay.getUserId()
Liferay 命名空间中有很多不错的东西,请看一下文档不太完善的 API:
此外,请查看 localhost:8080/api/jsonws 下可用的 Web 服务,您可以使用 javascript 调用来调用它们:
Liferay.Service(
'/user/get-user-by-id',
{
userId: 10199
},
function(obj) {
console.log(obj);
}
);
在 Liferay 中获取用户的一种简单易行的方法是PortalUtil.getUser函数。
User user = PortalUtil.getUser(portletRequest);