背景

对于很多后台管理系统来说,权限较多,对系统操作的人也会多。如此以来,对于一些操作的记录就非常有必要了,从而可以清楚的追踪对系统进行操作的人以及做了哪些操作,并且可以快速排查定位一些问题。下面简单说一下自己设计的思路。

整体思路

基于spring 拦截器和java的注解,并且通过多线程形式异步向数据库中插入操作日志来实现操作日志功能模块。

1.数据库设计

主日志mainlog表
记录主日志相关信息
子日志表childlog
记录子操作日志信息

2.java自定义注解

@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface MainAnnotation {int maintype() default 0;String type() default "0";String tables() default "";String desc() default "";
}

3.spring拦截器

public class MainInterceptor extends HandlerInterceptorAdapter{private static final ThreadLocal<Long> mailogthreadLocal = new ThreadLocal<Long>();//前置拦截@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (!(handler instanceof HandlerMethod)) {return super.preHandle(request, response, handler);}mailogthreadLocal.set(System.currentTimeMillis());return super.preHandle(request, response, handler);}//后置拦截@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {if (!(handler instanceof HandlerMethod)) {super.preHandle(request, response, handler);return;}HandlerMethod method = (HandlerMethod)handler;MainAnnotation mainlog = method.getMethodAnnotation(MainAnnotation.class);if(mainlog != null) {String desc = mainlog.desc();int maintype = mainlog.maintype();String type = mainlog.type();String tables = mainlog.tables();String username = (String) request.getSession().getAttribute("username");long costtime = (int) (System.currentTimeMillis()-get());LogUtil.writeMainLog(new MainLogEntity(maintype, username, tables, desc, costtime),list);//异步插入数据库日志记录}}

4.异步插入数据库日志记录

public class LogUtil {private final static Logger logger = LoggerFactory.getLogger(LogUtil.class);private static ExecutorService executorService = Executors.newFixedThreadPool(2);private static MainServiceImpl mainService = SpringContextHolder.getBean("mainServiceImpl");public static void writeMainLog(MainEntity log, List<ChildEntity> list) {executorService.execute(new Runnable() {@Overridepublic void run() {try {if (mainService != null) {logger.info("---插入日志start---");int issuccess = mainService.insertlog(log);int mainid = log.getId();if (list != null && issuccess > 0 && mainid > 0) {for (ChildLogEntity clog : list) {clog.setMainlogid(mainid);}mainService.insertchildlog(list);}logger.info("---插入日志end---");} else {logger.error("spring init bean mainService fail,please check configs");}} catch (Exception e) {e.printStackTrace();}}});}}

5.使用实例

后台管理系统操作日志模块设计思路相关推荐

  1. Java-Web机试练习题一、后台管理系统——管理员管理模块

    题目:后台管理系统--管理员管理模块 一. 语言和环境 1. 实现语言:JAVA 语言. 2. 环境要求:MyEclipse/Eclipse + Tomcat + MySql. 3. 使用技术:Jsp ...

  2. 06_04_任务一:拉勾教育后台管理系统[课程管理模块、图片上传、 BeanUtils封装实体类](SSM)

    拉勾教育后台管理系统(SSM) 1. 项目架构 1.1 项目介绍 ​ 拉勾教育后台管理系统,是提供给拉勾教育的相关业务人员使用的一个后台管理系统, 业务人员可以在 这个后台管理系统中,对课程信息.广告 ...

  3. 数据操作日志记录表设计、可以查询、恢复历史数据记录

    数据操作日志记录表设计.可以查询.恢复历史数据记录 摘要:在日常开发中,我们经常会遇到这样的需求,产品希望用户对业务系统的所有操作都做日志记录,尤其是涉及到修改.删除的时候,更应该,因为用户在操作系统 ...

  4. 浅谈管理系统操作日志设计(附操作日志类)

    原文地址:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html 相关文章链接:<系统操作日志设计> 在开始做之前,必须 ...

  5. php 服务器日志管理系统,ThinkPHP6实现简单的记录网站后台管理操作日志方法

    我们在开发系统的时候,会考虑到安全问题,赋予不用管理员不用权限,同时,记录每个管理员的操作记录,达到监控管理员的每一步操作和防止数据误删保障系统安全. 一.如何写记录管理员操作日志呢? 方法思路:1. ...

  6. Django 慕课前后端实战 -- xadmin后台管理系统、登录模块、注册模块、邮箱激活链接、找回密码

    注意:win下面 pip install 安装python module失败后,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/网站才在相应的module, ...

  7. 便捷记账本小程序+后台管理系统-JAVA【数据库设计、源码、开题报告】

    第一章 绪 论 1.1选题背景 互联网是人类的基本需求,特别是在现代社会,个人压力增大,社会运作节奏高,随着互联网的快速发展,用户的需求也越来越高,用户也将越来越多依靠互联网而不是自己获取信息,使得各 ...

  8. Vue项目实战之电商后台管理系统(二) 主页模块

    前言 目录 前言 一.主页布局 1.1 整体布局 1.2 头部区域布局 1.3 左侧菜单布局 1.3.1 静态布局 1.3.2 通过axios请求拦截器来进行权限验证 1.3.3 通过axios获取左 ...

  9. spring - AOP(6)- 记录后台管理员操作日志

    一.需求 1.1 问题 后台一些涉及到新增.编辑.删除等敏感操作的需要记录下操作日志,包含操作人.操作内容.请求参数等等信息. 1.2 思路 统一对Controller层的方法进行拦截,记录下请求信息 ...

最新文章

  1. Spring Cloud Gateway CORS 方案看这篇就够了
  2. 常用的数据统计Sql 总结(转)
  3. NYOJ 201 作业题
  4. 新增方法java_Java8_map新增方法
  5. JUC原子类-数组类型(三)
  6. xul 创建一个按钮
  7. 一天一小步_我学C#入门精典_第八天
  8. Vmware ESXi应用之如何使用母盘模板部署虚拟机
  9. 15 个超赞超牛逼的 Linux 工具,提高效率的同时增加乐趣!
  10. 离散数学第六版第er章偶数题答案_离散数学答案--第二章习题解答.doc
  11. 富士通Fujitsu DPK320 打印机驱动
  12. Node.js从入门到精通
  13. hdoj 5651 xiaoxin juju needs help 【组合数学】
  14. 牛顿法python 实现
  15. 像素是什么意思?一个像素有多大?告诉你像素和分辨率的关系!
  16. 【考研加油】所有上岸的考研人都有一个共同的特点,就是他们都参加考试了。2023考研加油。
  17. 多项式回归(PolynomialFeatures)
  18. 关于mysql的判断题_数据库选择题和判断题
  19. python中输出某段文字_怎样用Python提取文本中某一段文字
  20. css让文字在一行内显示

热门文章

  1. 用python画波浪线的句子_matplotlib中的锯齿线或波浪线
  2. 如何辨别僵尸粉--利用信息熵、图灵测试和数字化社会网络
  3. ubuntu16.04 bashrc文件在哪
  4. 了解 ArcScene 与 ArcGlobe
  5. angularJs滚动条
  6. Ericsson-LG 5G无线测试下载速率达26.3Gbps
  7. Apple不认Android的AMR?用暴风转码给它脱胎换骨吧
  8. 完美解决安卓RelativeLayout中android:layout_marginRight不生效
  9. 7-5 前后分离(同源策略、修改host、跨域)
  10. 防儿童高楼坠落 防护栏与安防设备齐上阵