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]
}
}
结果: