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:记录操作日志相关推荐

  1. 如何使用SpringBoot AOP 记录操作日志、异常日志?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:咫尺的梦想_w cnblogs.com/wm-dv/ ...

  2. 用aspect在springboot中记录操作日志至数据库的详细过程

    代码来自若依管理系统的后台,我截取的其中用于记录操作日志的部分 1.切面 2.操作日志表 3.spring工具类 4.客户端工具类 异步工厂(产生任务用) 异步任务管理器 5.服务层 6.控制层 1. ...

  3. slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...

    大家好,我是程序员7歌! 今天我将为大家讲解如何通过自定义注解记录接口访问日志.一般的开发中,有两种方式可以记录日志信息,第一种:把接口日志信息保存到日志文件中,第二种:把接口操作日志保存到数据库中, ...

  4. 【实践】万字干货:如何优雅地记录操作日志?(附代码)

    猜你喜欢 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.某视频APP推荐详解(万字长文) 4.微博推荐算法实践与机器学习平台演进 5.腾讯PCG推荐系统应用实践 6.强化学 ...

  5. JAVA记录操作日志步骤

    项目地址:https://gitee.com/Selegant/logs-demo.git 说明 系统日志不论是在日常的管理还是维护中都会起到很大的作用,但是在日志的记录中通常会存在很多的问题 日志记 ...

  6. 美团的系统是如何记录操作日志?

    来源:美团技术团队 操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API.操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内 ...

  7. 如何优雅地记录操作日志?

    1 前言 在日常的工作开发中,记录业务操作产生的日志是很普遍的操作.通过它可以看到每条数据产生的变化,也能在出现问题的时候快速找到原因. 对于我自己而言,因为我这里记录的日志需要进行一些逻辑判断,并不 ...

  8. SpringBoot AOP 记录操作日志、异常日志

    使用SpringBoot AOP 记录操作日志.异常日志 我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能.在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因 ...

  9. 记录操作日志(JAVA版某大厂基础实践)

    1. 操作日志的使用场景 2. 实现方式 2.1 使用 Canal 监听数据库记录操作日志 2.2 通过日志文件的方式记录 2.3 通过 LogUtil 的方式记录日志 2.4 方法注解实现操作日志 ...

最新文章

  1. 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array...
  2. 代码自动化打包系统【原创】
  3. WIN7情况下VMWARE虚构机中Microsoft Windows XP Professional 2002 Service Pack2与win7共享文件的编制:
  4. js 获取 本周、上周、本月、上月、本季度、上季度的开始结束日期
  5. centos6.5里用yum简单安装配置lamp
  6. Biorhythms 中国剩余定理
  7. 非标自动化3D选型软件三维SW合集solidworks标准件机械设计电机库
  8. vijos 1066 树状数组
  9. windows捕获串口数据_如何下载和安装用于Windows数据包捕获的Npcap库?
  10. 数据库五种约束以及添加方法
  11. wap 横屏适配和竖屏适配的通用方案
  12. ubuntu设置自动关机
  13. python海龟画笔速度_【判断题】Python海龟绘图中,设置画笔绘制速度的函数是speed()。...
  14. 【评测】肠道微生物核酸提取试剂盒
  15. 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)
  16. 围观饱醉豚与众程序员互怼有感
  17. 弘扬文化,传承文明-西安第七届文化马拉松
  18. [心情文字] 总有那么几张图感动你,逗乐你…… (转自NGA)
  19. STM32-EXTI
  20. PDF怎么编辑,PDF如何裁剪页面

热门文章

  1. Java使用简单工厂模式对面向接口编程模式的深度解耦实现
  2. FlipView和自定义值转换器
  3. Android 手把手教您自定义ViewGroup
  4. Java 性能优化实战记录(3)--JVM OOM的分析和原因追查
  5. SQL 简单,复杂查询,基本函数查询
  6. go使用PostgreSQL数据库
  7. 为啥channel能做到线程安全
  8. 网址http格式的拆分
  9. 类与类之间的交互关系
  10. springboot:spring.profiles.active