【发布时间】:2009-06-09 15:59:10
【问题描述】:
我正在尝试为 liferay 开发一个 portlet。
如何访问当前登录用户的用户名和密码(以及 liferay 拥有的其他数据)?
我还希望能够在用户更改密码时执行一些代码。
【问题讨论】:
我正在尝试为 liferay 开发一个 portlet。
如何访问当前登录用户的用户名和密码(以及 liferay 拥有的其他数据)?
我还希望能够在用户更改密码时执行一些代码。
【问题讨论】:
您可以通过在PortletRequest 对象中调用getRemoteUser() 来获取用户ID。这是由 JSR-168 定义的,因此它是跨门户兼容的。
获得 ID 后,您可以通过调用 getUserById()(Liferay 特定服务)获取更多信息。这是 Portlet API 规范未涵盖的内容,因此它将您锁定在 Liferay 中。
【讨论】:
portletRequest.getAttribute(PortletRequest.USER_INFO) 保持更多的门户独立性。这将返回可由每个门户实现定义的用户属性映射。有关 Liferay 的用户属性,请参阅 portlet-custom.xml 和 com.liferay.portlet.UserAttributes。大多数情况下,用户属性名称是 portlet 规范推荐的名称。
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 类来覆盖服务。然后检查密码更改并在您的自定义类中执行您的代码。
希望这会有所帮助。
【讨论】:
或者你可以只使用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);
【讨论】: