Доступ к пользователю из портлета 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);