null

Как получить doAsUserId в Liferay

В Liferay уже реализована возможность прикинуться пользователем (impersonate) через интерфейс админки в разделе Users and Organizations.

При штатном impersonate Liferay добавляет в запрос гет-параметр doAsUserId. Этот параметр представляет собой заэнкоженый user id пользователя, за которого будет производиться логин.

Но бывают случаи, когда необходимо добавить кастомную возможность impersonate в портлете. Для этого тоже просто достаточно самостоятельно передать нужный doAsUserId в параметр урла. 

Как сгенерировать doAsUserId: 
 

1. При версии Liferay 7.4.3.23-ga23 и выше

Нужно заэнкодить userId пользователя, используя метод encode класса EncryptorUtil

import com.liferay.portal.kernel.encryptor.EncryptorUtil; 

Метод encrypt, который принимает company key и userId:
 

Company company = LiferayPortletHelperUtil.getThemeDisplay().getCompany(); // получить дефолтную company.
EncryptorUtil.encrypt(company.getKeyObj(), String.valueOf(user.getUserId()));

Зависимость мавена для пакета  com.liferay.portal.kernel.encryptor.EncryptorUtil

<dependency>
    <groupId>com.liferay.portal</groupId>
    <artifactId>com.liferay.portal.kernel</artifactId>
    <version>version</version>
    <scope>provided</scope>
</dependency>

2. При версии Liferay ниже 7.4.3.23-ga23
 

При более ранней версии алгоритм такой же, только необходимый энкриптор находится в пакете сom.liferay.petra.encryptor.Encryptor

Company company = LiferayPortletHelperUtil.getThemeDisplay().getCompany(); // получить дефолтную company.
Encryptor.encrypt(company.getKeyObj(), String.valueOf(user.getUserId()));

Зависимость мавена для пакета  сom.liferay.petra.encryptor.Encryptor:

<dependency>
   <groupId>com.liferay</groupId>
   <artifactId>com.liferay.petra.encryptor</artifactId>
   <version>version</version>
</dependency>