1.通过afterCompletion方法的handler参数获取访问控制层对应方法的Method对象,通过反射获取标注在控制层方法的@RequirePermissions注解中的value属性,再通过此属性从菜单表中获取对应的操作名称.
2.通过afterCompletion方法的HttpServletRequest参数的getRemoteAddress()方法获取客户端远程IP、getHeader()方法获取HTTP请求头中的user-agent参数、getRequestURI()方法获取请求URL、getParameterMap()方法获取请求体中的参数、getMethod()方法获取HTTP请求方法.
3.通过判断afterCompletion方法的Exception参数是否为空来确定此处请求是否成功,若Exception参数不为空则获取异常中的信息保存进库中.
*afterCompletion方法中应使用异步的方式新建一个线程进行日志的记录.
*使用拦截器实现系统操作日志功能的好处是可以通过HttpServletReqeust实体获取更多关于客户端的信息,缺点是不易扩展,只能通过键值对的形式获取请求参数.
*利用Spring AOP的环绕通知实现系统操作日志.
1.切入点为Service层中的业务方法。
2.当Service层中的方法执行前将会进入切面中的环绕通知方法,可以通过ProceedingJoinPoint的getArgs()方法获取连接点的参数集,在此时可以根据记录ID查询数据库中变更前的记录实体。
3.执行ProceedingJoinPoint的process()方法调用连接点,方法的返回值为连接点的返回值,若执行成功且无异常则可以判断变更前和变更后哪些属性发生了变化,最后进行入库操作。
*可以直接在连接点的前后简单的把入参和返回值进行打印。
*使用AOP实现日志的好处是不影响原有的代码结构、可以很容易的得到方法执行的参数和返回值、易扩展,可以配置不同的切入点来做不同的逻辑处理,缺点是不能获取更多关于客户端的信息。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx