Слушатель модуля Liferay: невозможно определить, кто внес изменение в модель - PullRequest
1 голос
/ 29 мая 2019

Мне нужно создать пользовательский аудит для модели User, чтобы отслеживать, кем был удален пользователь.Я пытался создать прослушиватель модуля Liferay для модели User, но я не могу получить сведения о том, кем пользователь удаляется.

Есть ли способ получить сведения о том, кто сделализменение модели User в прослушивателе модуля Liferay?


Подробные сведения о среде My Liferay

  • Портал Liferay: liferay-ce-portal-tomcat-7.0-ga5
  • База данных: postgres (PostgreSQL) 9.5.17
  • IDE: eclipse-oxygen 4.7.3a
/*
 * Below is the sample code that I have tried to create the Liferay module listener for the User model
 */
package com.test.useraudit.modellistner;

import org.osgi.service.component.annotations.Component;

import com.liferay.portal.kernel.exception.ModelListenerException;
import com.liferay.portal.kernel.model.BaseModelListener;
import com.liferay.portal.kernel.model.ModelListener;
import com.liferay.portal.kernel.model.User;

@Component(
    immediate = true,
    service = ModelListener.class
)

public class CustomUserModelListner extends BaseModelListener<User>{
    @Override
    public void onBeforeRemove(User user) throws ModelListenerException{
        System.out.println("In onBeforeRemove method");
        System.out.println("User detail :");
        System.out.println(user);
        super.onBeforeRemove(user);
    }

    @Override
    public void onAfterRemove(User user) throws ModelListenerException{
        System.out.println("In onAfterRemove method");
        System.out.println("User detail :");
        System.out.println(user);
        super.onAfterRemove(user);
    }
}

1 Ответ

2 голосов
/ 29 мая 2019

Да, это возможно.

Существует неявная локальная переменная потока с именем ServiceContext, которая содержит подробности вызывающего контекста.

Пример:

   @Override
    public void onBeforeRemove(User user) throws ModelListenerException{
            ServiceContext serviceContext =
                 ServiceContextThreadLocal.getServiceContext();

            System.out.println("Calling user:" + serviceContext.getUserId());
    }
...