从liferay portlet访问用户?

时间:2009-06-09 15:59:10

标签: liferay portlet

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

如何访问当前登录用户的用户名和密码(以及其他数据生命周期)?

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

4 个答案:

答案 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);