Grails 增加实体类的增删改监听(操作日志)

package middol.base

import grails.converters.JSON
import grails.util.Holders
import groovy.util.logging.Slf4j
import org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor
import org.hibernate.event.spi.PostInsertEvent
import org.hibernate.event.spi.PostUpdateEvent
import org.hibernate.event.spi.PreDeleteEvent
import org.springframework.beans.factory.annotation.Autowired

/**
* @Description:    自定义操作日志
* @Author:         zhangjiayu@middol.com
* @CreateDate:     2020/7/21 22:27
* @Version:        1.0
*/
@Slf4j
class AuditEventListener extends ClosureEventTriggeringInterceptor{
    AuditLogService auditLogService = new AuditLogService()
    @Override
    void onPostInsert(PostInsertEvent event) {
//        log.info("新增数据监控:${event?.entity as JSON}")
        auditLogService.saveAuditLog("INSERT", event?.entity)
    }

    @Override
    boolean onPreDelete(PreDeleteEvent event) {
//        log.info("删除数据监控:${event.entity as JSON}")
        auditLogService.saveAuditLog("DELETE", event?.entity)
        return false
    }

    @Override
    void onPostUpdate(PostUpdateEvent event) {
//        log.info("修改数据监控:${event?.entity as JSON}")
        auditLogService.saveAuditLog("UPDATE", event?.entity)
    }
}
package middol.base

import grails.converters.JSON
import middol.logs.AuditLog
import middol.utils.SecurityUtils
import org.grails.web.servlet.mvc.GrailsWebRequest
import static grails.async.Promises.task

/**
* @Description:    操作日志记录
* @Author:         zhangjiayu@middol.com
* @CreateDate:     2020/8/5 13:23
* @Version:        1.0
*/
class AuditLogService {
    /**
     * 保存操作日志
     * @param type      操作类型:增删改
     * @param jsonData  操作的实体
     */
    def saveAuditLog(String type, def entry) {
        String className = entry?.class?.getName()
        def id = entry?.id
        if(!className.contains("AuditLog") && !className.contains("LoginRecord") && !className.contains("Requestmap") && id){
            //获取当前登录人
            def username = SecurityUtils.getLoginUsername()
            //获取请求的路径
            GrailsWebRequest request = GrailsWebRequest.lookup()
            def uri = request?.request?.requestURI

            JSON jsonData = entry as JSON
            task{
                AuditLog.withTransaction { session->
                    def auditlog = [
                            className: className,
                            persistedObjectId: id,
                            eventName: type,
                            uri: uri,
                            jsonValue: "${jsonData}"
                    ]

                    new AuditLog(auditlog).save(flush: true)
                }
            }
        }

    }
}

 

resources.groovy 

bean{
    auditListener(AuditEventListener)
    hibernateEventListeners(HibernateEventListeners) {
        listenerMap = ['post-insert': auditListener,
                       'post-update': auditListener,
                       'pre-delete' : auditListener]
    }
}

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值