目地:
我们很多程序每天有大量用户访问,特别是一些增删改操作,如果每一笔操作都写一条SQL插入对程序的侵入太大了,但是这些操作又非常有必要保存。
方案:
这里考虑使用AOP拦截器,在接口请求时对@Logbefore的注解进行切面拦截,通过前置通知获取返回的对象,然后遍历对象中的请求的属性和参数进行记录。
环绕拦截请看自定义注解通过aop拦截用户访问信息并存入到数据库中(二)
前置拦截具体代码如下:
1,自定义一个前置Log注解
package com.hcmony.sword.aspect.before;
import com.hcmony.sword.aspect.around.LogAround;
import java.lang.annotation.*;
/**
* <h3>方法执行之前操作日志记录</h3>
* <p>如果想使用广告操作前后记录请使用{@link LogAround}</p>
*
* @author hcmony
* @since V1.0.0, 2018/02/07 15:22
*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface LogBefore {
/**
* @return 要记录系统的名称。
*/
String keyName();
/**
* @return 操作类型
*/
String operType() default "";
/**
* @return 操作人
*/
String user() default "";
}
2,切面拦截有这个注解的方法,对这个方法的参数进行输出,我这里是打印到控制台,后面通过ELK收集起来,进行分析处理。
package com.hcmony.sword.aspect.before;
import com.hcmony.sword.aspect.LogAspect;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.a