Доступ к пользователю из портлета liferay?

Я пытаюсь создать портлет для liferay.

Как я могу получить доступ к имени пользователя и паролю (и другим ресурсам данных) пользователя, который в настоящее время вошел в систему?

Я также хотел бы иметь возможность выполнять код, когда пользователи меняют свой пароль.

Ответ 1

Вы можете получить идентификатор пользователя, вызвав getRemoteUser() в объекте PortletRequest. Это определяется JSR-168, поэтому он совместим с несколькими порталами.

После того, как у вас есть идентификатор, вы можете получить дополнительную информацию, вызвав getUserById() (специальная служба Liferay). Это не относится к спецификации API Portlet, поэтому он блокирует вас до Liferay.

Ответ 2

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 и переопределить службы, расширив класс UserLocalServiceWrapper. Затем проверьте изменение пароля и выполнение кода внутри своего пользовательского класса.

Надеюсь, что это поможет.

Ответ 3

Или вы можете просто использовать javascript:

Liferay.ThemeDisplay.getUserId()

В пространстве имен Liferay много приятных вещей, посмотрите на не очень хорошо документированный API:

Кроме того, посмотрите веб-службы, доступные под localhost: 8080/api/jsonws, которые вы можете вызвать с помощью javascript-вызова:

Liferay.Service(
  '/user/get-user-by-id',
  {
    userId: 10199
  },
  function(obj) {
    console.log(obj);
  }
);

Ответ 4

Один простой и простой способ получить пользователя в Liferay - это функция PortalUtil.getUser.

User user = PortalUtil.getUser(portletRequest);