Liferay 模块侦听器:无法获得谁对模型进行了更改

Liferay module listener : Unable to get who made a change to the model

我必须为用户模型创建自定义审核以跟踪删除用户的人。我试图为用户模型创建一个 Liferay 模块侦听器,但我无法获得删除用户的详细信息。

有什么方法可以详细了解谁对 Liferay 模块侦听器中的用户模型进行了更改?


我的 Liferay 环境详细信息

/*
 * 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);
    }
}

是的,这是可能的。

有一个名为 ServiceContext 的隐式线程局部变量,其中包含调用上下文的详细信息。

样本:

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

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

是的,这是可能的,Liferay 中包含了 OOTB。删除事件已经是它的踪迹。您可以看到审核事件和系统事件 table.

您可以使用审计事件框架进行自定义。