我正在尝试为liferay开发一个portlet。
如何访问当前登录用户的用户名和密码(以及其他数据生命周期)?
我还希望能够在用户更改密码时执行一些代码。
答案 0 :(得分:15)
您可以通过调用PortletRequest
对象中的getRemoteUser()
来获取用户ID。这是由JSR-168定义的,因此它是跨门户兼容的。
获得ID后,您可以通过调用getUserById()
(Liferay特定服务)获取其他信息。这是Portlet API规范未涵盖的内容,因此它会将您锁定到Liferay。
答案 1 :(得分:14)
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有一个概念,即管理员(或具有正确权限集的人)可以模拟门户网站的特定用户。通过这个,他们可以看到门户网站对该用户的看法。
用于在用户更改密码时执行代码: 一种方法是创建hook plugin并通过扩展UserLocalServiceWrapper类来覆盖服务。然后检查密码更改并在自定义类中执行代码。
希望这有帮助。
答案 2 :(得分:1)
或者你可以使用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);
}
);
答案 3 :(得分:0)
在Liferay中获取用户的一种简单方法是 PortalUtil.getUser 功能。
User user = PortalUtil.getUser(portletRequest);