Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmit,那么只需要拦截onSubmit并记录对应的参数即可作为操作日志。
首先要拦截Controller层的方法就需要在dispatcher-servlet.xml中配置拦截器,如下:
<aop:config><aop:advisor id="submitTx" advice-ref="txSubmitAdvice"pointcut="execution(* *..controller.*Controller.onSubmit(..))" order="0" /></aop:config><bean id="txSubmitAdvice" class="com.zcmp.xunji.service.SubmitAdvice"/>
dispatcher-servlet.xml
接下来在Service中定义自己的AOP拦截器
package com.disappearwind.service;import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.AfterReturningAdvice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails;import com.disappearwind.model.BaseObject; import com.disappearwind.model.Role; import com.disappearwind.model.Syslog; import com.disappearwind.model.User;import java.lang.reflect.Method; import java.util.Date; import java.util.Set;import javax.servlet.http.HttpServletRequest;/*** 对Controller中的onSubmit方法监听,记录用户的操作日志* * @author mraible*/ public class SubmitAdvice implements AfterReturningAdvice, MethodInterceptor {private final Log log = LogFactory.getLog(SubmitAdvice.class);private UserManager userManager = null;private GenericManager<Syslog, Long> syslogManager;@Autowiredpublic void setSyslogManager(@Qualifier("syslogManager") GenericManager<Syslog, Long> syslogManager) {this.syslogManager = syslogManager;}@Autowiredpublic void setUserManager(UserManager userManager) {this.userManager = userManager;}/*** 在用户的业务操作执行完之后记录操作日志* * @param returnValue* the user object* @param method* the name of the method executed* @param args* the arguments to the method* @param target* the target class* @throws Throwable* thrown when args[0] is null or not a Base object*/public void afterReturning(Object returnValue, Method method,Object[] args, Object target) throws Throwable {// 方法签名:String onSubmit(AppToken appToken, BindingResult errors,// HttpServletRequest request,HttpServletResponse response)try {if (args[0] instanceof BaseObject) {BaseObject obj = (BaseObject) args[0];HttpServletRequest request = (HttpServletRequest) args[2];// 发生在哪个ModelString modelName = obj.getClass().getSimpleName();// Model中的数据String modelData = obj.toString();// 操作类型,request参数中sava就是Save,request参数中有delete则是DeleteString action = "Save";if (null != request.getParameter("delete")) {action = "Delete";}// 记录操作日志到数据库Syslog syslog = new Syslog();syslog.setModule(modelName + "." + action);syslog.setContent(modelData);syslog.setCreateDate(new Date());syslog.setCreator(getCurrentUserID());syslogManager.save(syslog);}} catch (Exception ex) {log.error(ex);}}/*** 获取当前操作的用户* * @return 用户ID*/private Long getCurrentUserID() {Long userID = 0l;SecurityContext ctx = SecurityContextHolder.getContext();if (ctx.getAuthentication() != null) {Authentication auth = ctx.getAuthentication();UserDetails user = (UserDetails) auth.getPrincipal();userID = this.userManager.getUserByUsername(user.getUsername()).getId();}return userID;} }
SubmitAdvice
注意,其中有一段是获取当前登录用户的ID的getCurrentUserID。
Syslog是自己定义的存储日志的数据结构。
转载于:https://www.cnblogs.com/disappearwind/p/4644956.html
Appfuse:记录操作日志相关推荐
- 如何使用SpringBoot AOP 记录操作日志、异常日志?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:咫尺的梦想_w cnblogs.com/wm-dv/ ...
- 用aspect在springboot中记录操作日志至数据库的详细过程
代码来自若依管理系统的后台,我截取的其中用于记录操作日志的部分 1.切面 2.操作日志表 3.spring工具类 4.客户端工具类 异步工厂(产生任务用) 异步任务管理器 5.服务层 6.控制层 1. ...
- slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...
大家好,我是程序员7歌! 今天我将为大家讲解如何通过自定义注解记录接口访问日志.一般的开发中,有两种方式可以记录日志信息,第一种:把接口日志信息保存到日志文件中,第二种:把接口操作日志保存到数据库中, ...
- 【实践】万字干货:如何优雅地记录操作日志?(附代码)
猜你喜欢 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.某视频APP推荐详解(万字长文) 4.微博推荐算法实践与机器学习平台演进 5.腾讯PCG推荐系统应用实践 6.强化学 ...
- JAVA记录操作日志步骤
项目地址:https://gitee.com/Selegant/logs-demo.git 说明 系统日志不论是在日常的管理还是维护中都会起到很大的作用,但是在日志的记录中通常会存在很多的问题 日志记 ...
- 美团的系统是如何记录操作日志?
来源:美团技术团队 操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API.操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内 ...
- 如何优雅地记录操作日志?
1 前言 在日常的工作开发中,记录业务操作产生的日志是很普遍的操作.通过它可以看到每条数据产生的变化,也能在出现问题的时候快速找到原因. 对于我自己而言,因为我这里记录的日志需要进行一些逻辑判断,并不 ...
- SpringBoot AOP 记录操作日志、异常日志
使用SpringBoot AOP 记录操作日志.异常日志 我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能.在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因 ...
- 记录操作日志(JAVA版某大厂基础实践)
1. 操作日志的使用场景 2. 实现方式 2.1 使用 Canal 监听数据库记录操作日志 2.2 通过日志文件的方式记录 2.3 通过 LogUtil 的方式记录日志 2.4 方法注解实现操作日志 ...
最新文章
- 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array...
- 代码自动化打包系统【原创】
- WIN7情况下VMWARE虚构机中Microsoft Windows XP Professional 2002 Service Pack2与win7共享文件的编制:
- js 获取 本周、上周、本月、上月、本季度、上季度的开始结束日期
- centos6.5里用yum简单安装配置lamp
- Biorhythms 中国剩余定理
- 非标自动化3D选型软件三维SW合集solidworks标准件机械设计电机库
- vijos 1066 树状数组
- windows捕获串口数据_如何下载和安装用于Windows数据包捕获的Npcap库?
- 数据库五种约束以及添加方法
- wap 横屏适配和竖屏适配的通用方案
- ubuntu设置自动关机
- python海龟画笔速度_【判断题】Python海龟绘图中,设置画笔绘制速度的函数是speed()。...
- 【评测】肠道微生物核酸提取试剂盒
- 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)
- 围观饱醉豚与众程序员互怼有感
- 弘扬文化,传承文明-西安第七届文化马拉松
- [心情文字] 总有那么几张图感动你,逗乐你…… (转自NGA)
- STM32-EXTI
- PDF怎么编辑,PDF如何裁剪页面