15

我正在尝试为liferay 开发一个portlet。

如何访问当前登录用户的用户名和密码(以及 liferay 拥有的其他数据)?

我还希望能够在用户更改密码时执行一些代码。

4

4 回答 4

15

您可以通过调用对象getRemoteUser()来获取用户 ID 。PortletRequest这是由 JSR-168 定义的,因此它是跨门户兼容的。

获得 ID 后,您可以通过调用getUserById()(Liferay 特定服务)获取附加信息。这是 Portlet API 规范未涵盖的内容,因此它将您锁定在 Liferay 中。

于 2009-06-10T11:45:36.543 回答
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 有一个概念,即管理员(或具有正确权限集的人)可以模拟门户的特定用户。通过这个,他们可以看到门户在该用户眼中的样子。

当用户更改密码时执行代码: 一种方法是创建一个钩子插件并通过扩展 UserLocalServiceWrapper 类来覆盖服务。然后检查密码更改并在您的自定义类中执行您的代码。

希望这可以帮助。

于 2012-03-15T14:14:40.127 回答
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);
  }
);
于 2016-02-29T17:57:25.623 回答
0

在 Liferay 中获取用户的一种简单易行的方法是PortalUtil.getUser函数。

User user = PortalUtil.getUser(portletRequest);
于 2016-03-04T10:10:14.933 回答