`
- 浏览:
605791 次
- 性别:
- 来自:
上海
-
springboot使用aop切面做用户操作日志记录
参考
https://blog.csdn.net/u2133048/article/details/98178861
https://blog.csdn.net/puhaiyang/article/details/78146620
spring cloud微服务架构想实现操作日志的切面
比如:rest层
@ApiOperation("保存用户")
@SysLogIntercept(action="save", description="保存用户")
@RequestMapping(value = "saveUserInfo",method = RequestMethod.POST)
public ObjectRestResponse<UserVo> saveUserInfo(@RequestBody UserVo userVo){
if (userVo==null || userVo.getDeptId()==null || userVo.getJobId()==null ) {
log.info("userVo为null 或 deptId为null 或 jobId为null=============");
return new ObjectRestResponse().code(CodeConstants.STATUS_CODE_DATA_ID_NULL);
}
Msg msg = userManager.saveUserInfo(userVo);
return new ObjectRestResponse().code(msg.getCode()).data(msg.getData()).bool(msg.getSucFlag()).msg(msg.getDesc()) ;
}
@ApiOperation("删除用户")
@SysLogIntercept(action="delete", description="删除用户")
@RequestMapping(value = "deleteUserInfo",method = RequestMethod.POST)
public ObjectRestResponse deleteUserInfo(@RequestParam String objectIdStr) {
if (StringUtils.isBlank(objectIdStr)) {
log.info("objectIdStr为空=============");
return new ObjectRestResponse().code(CodeConstants.STATUS_CODE_DATA_ID_NULL) ;
}
Msg msg = userManager.deleteUserInfo(objectIdStr.trim()) ;
return new ObjectRestResponse().msg(msg.getDesc()).code(msg.getSucFlag() ? 0 : msg.getCode());
}
SysLogIntercept是我定义的一个切面
因为新增保存和编辑保存是一个接口,需要区分操作日志是新增还是编辑,所以需要获取请求的参数,判断请求的参数中id的值是否为空
//获取目标方法的参数信息
Object[] obj = joinPoint.getArgs();
for (Object argItem : obj) {
Object idObj = getValueByKey(argItem, "id");
Long idLong = null ;
idObj = (idObj!=null) ? (Long)idObj : null ;
idValue = (idObj!=null) ? String.valueOf(idObj) : null ;
System.out.println("---->saveParamInfo-->idValue:" + idValue);
}
保存的时候,也不是调用了保存接口就一定会成功,有可能会保存提示重复,此时要区分保存后的返回数据是否成功,才插入日志
/**
* 环绕通知 @Around , 当然也可以使用 @Before (前置通知) @After (后置通知)
*
* @param joinPoint
* @return
* @throws Throwable
*/
@AfterReturning(pointcut="@annotation(com.ronglian.kangrui.saasprivate.research.admin.components.SysLogIntercept)", returning="rvt")
public void AfterExec(JoinPoint joinPoint,Object rvt){
String sysAction = this.getSysAction(joinPoint) ;
ObjectRestResponse restResponse = (ObjectRestResponse)rvt ;
if(sysAction.equals("save")) {
// 新增或编辑
if (restResponse.getBoolResult()) {
long beginTime = System.currentTimeMillis();
long time = System.currentTimeMillis() - beginTime;
Object object = ((ObjectRestResponse) rvt).getData() ;
Long resultId = (object!=null) ? (Long)getValueByKey(object, "id") : null ;
String resultIdStr = (object!=null) ? String.valueOf(resultId) : null ;
saveLog(joinPoint, resultIdStr);
}
} else {
// 删除
if (restResponse.getCode()==0){
saveLog(joinPoint, idValue);
}
}
log.info("rvt=={}", JSON.toJSONString(rvt) );
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
拦截器的使用、aop切面的使用、如何自定义注解以及自定义注解的使用、本地线程的使用方法及适用场景 有不懂的地方可以找我,项目readme介绍提供了联系方式 拦截器+aop+自定义注解+本地线程实现统一接口日志记录
1.使用aop切面编程解耦 2.使用spring事件监听保存日志 3.日志内容详细包括请求ip、请求响应数据、异常信息等
主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
主要介绍了springboot如何使用AOP做访问请求日志,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springboot-aop-aspect Springboot使用Aspect实现一个切面,以记录日志为例
其实,小哈在之前就出过一篇关于如何使用 AOP 切面统一打印请求日志的文章,那为什么还要再出一篇呢?没东西写了? 哈哈,当然不是!原因是当时的实现方案还是存在...一、先看看切面日志输出效果 二、添加 AOP Maven
springaop拦截controller日志
配置AOP切面编程,解决日志记录业务。基于转账案例,演示事务管理操作。基于Cache注解模式,管理Redis缓存。基于Yml配置的方式,实现文件上传逻辑。配置MongoDB数据库,实现增删改查操作。配置Actuator组件,实现系统监控...
com-aop注释权限演示
NULL 博文链接:https://conkeyn.iteye.com/blog/2354644
毕业设计基于springboot+mysql的进销存管理系统项目源码。也可作为期末大作业。 使用说明 ...安装教程 ... 软件说明 商品进货销售退货 角色权限动态分配 ...Aop切面日志 ...毕业设计基于springboot+mysql的进销存管理...Aop切面日志
前端: Jsp + Layui版本2.6.8 Jquery 版本jquery-2.1.1.min.js 图标使用阿里图标库下载的(可自己更换) 后端: SpringBoot 版本2.1.5.RELEASE ...框架已使用AOP切面及开启cglib代理实现日志数据库存储
使用AOP切面实现日志数据库存储 适配手机模式: 可视宽度小于1100时自动兼容 加密: AES + Base64 等 系统访问路径:http://localhost:8080/human-resources-system 账号:admin 密码:123456
使用AOP切面实现日志数据库存储 适配手机模式: 可视宽度小于1100时自动兼容 加密: AES + Base64 等 系统访问路径:http://localhost:8080/human-resources-system 账号:admin 密码:123456
360百科:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的...
,结合MyBatis构建数据库访问层,以及使用AOP实现方法切面拦截,以及结合Redis高度封装类RedisTemplate实现数据缓存增值,修改,改,查操作,数据库使用MySQL 8.0.16,数据源使用阿里巴巴Druid,日志采用Log4j框架...
基于springboot三层架构分层解耦,包含mybatis,springmvc等实现员工与所属部门的增删改查,使用过滤器,拦截器,jwt令牌完成登录校验,并使用AOP面向切面编程实现记录操作日志,并将员工照片上传至阿里云端再获取至...
SpringBoot基础配置框架,很适合参考学习,包含内容有:1....8.aop日志切面;9.scheduled定时任务;10.拦截器验证token;11.支持调用https;12.maven打包跳过测试; 更改配置中的数据库和redis地址后demo可以直接运行。
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。其与设计模式完成的任务差不多,是提供另一种角度来思考程序的...