springMVC记录系统日志的几种方式
在项目开发中往往需要记录一些用户操作的系统日志到数据库,而不仅仅是记录在文件中或者log4j上。
第一种是最简单最原始也是最繁琐最笨的办法:即每个需要记录的操作入口方法中去调用新增日志的接口。
第二种是采用spring的拦截器进行方法拦截:
建立一个拦截器:
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.dw..interceptor.LogInterceptor"></bean>
</mvc:interceptor>
新建一个拦截器的class继承spring web的HandlerInterceptorAdapter类,在spring4中该类有四个方法可以进行重写,如:
preHandle:它会在处理方法之前执行,可以用来做一些编码处理、安全限制之类的操作。
postHandle:它是在方法执行后开始返回前执行,可以进行日志记录、修改ModelView之类的操作。
afterCompletion:最后执行,无论出错与否都会执行这个方法,可以用来记录异常信息和一些必要的操作记录。
afterConcurrentHandlingStarted:controller方法异步开始执行时就开始执行这个方法,而postHandle需要等到controller异步执行完成后再执行。
需要注意的是spring的拦截器无法获取处理函数的参数值。
第三种就是采用spring的AOP配置注解进行拦截:
首先在springAOP中的三个概念:advice、pointcut、advisor。
新建一个类,无需任何继承和实现接口,只需要在类上加入注解@Aspect。创建一个切入点的方法,注解@Pointcut,然后在创建一个方法,配置需
要通知的类型,通过JoinPoint相关类来获取参数值和请求的内容。具体的切入点和通知类型的表达式需参考springAOP相关的表达式语法。然后
需要在配置文件配置<aop:aspectj-autoproxy>,即aspectj动态代理。
具体的日志记录实现、可以采用匹配请求地址的方法进行记录(因为查询操作可能不需要记录),哪些需要记录的请求可以通过配置文件来配置,也可以通过注解来实现。
或者是通过自定义注解来实现日志拦截,通过Pointcut拦截具体的注解而达到按需记录日志的功能。
最新文章
- CentOS安装Maven
- 【5集iCore3_ADP演示视频】5-5 iCore3应用开发平台示波器和信号源校准
- ajax读取XML文本(如读取城市)
- (九)串行口方式0 拓展并行输出端口 02 74LS164芯片
- eclipse Project facet Java version 1.8 is not supported.
- Hadoop :map+shuffle+reduce和YARN笔记分享
- open/fopen read/fread write/fwrite区别
- (二)Angularjs - 入门(2)
- Altium Designer (protel) 各版本“故障”随谈
- jar打包命令
- linux历史发展
- ios7禁止默认划动返回
- html5 canvas画布尺寸与显示尺寸
- 根据高德API知道坐标获取详细地址信息
- Redis数据结构之skiplist
- python统计字词练习
- 关于Java项目打包成Runnable jar文件后运行时图片不显示的问题
- 洛谷 质因子分 p2043
- 【pyqtgraph绘图】案例-动态的正余弦波形图
- wxPython 入门开发示例
热门文章
- Javascript:scrollWidth,clientWidth,offsetWidth的区别(转)
- $.data()、$().data
- Industry Engineer
- rm: 无法删除 ";xxxxx.o"; : 输入/输出错误.
- HDU2066一个人的旅行/最短路问题
- 自动打开notepad 并写入数据
- Loadrunner之脚本的调试和保存(六)
- HDU 4828 Grids(卡特兰数+乘法逆元)
- java 内存分配全面解析
- Linux学习 -- 用户和用户组管理