aop切面监听操作记录日志

aop切面监听类中的方法(如 增删改查)
1、创建一个自定义注解来标记监听的方法

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UserAnnotation {
}

2、创建一个监听类用来监听方法

注意注解

@Aspect
@Component
@Order(1)
@Slf4j
public class UserListener {

// 定义一个切面,括号内写入自定义注解的路径,被该注解标注的方法,将走此处的增强方法。
    @Pointcut("@annotation(com.server.system.utils.annotation.UserAnnotation)")
    private void actionRecordCheck() {
    }

3、对于注解标记的方法使用 after,before,around自行判断。例如

对类中的增删改方法监听

 @After("actionRecordCheck()")
    // @AfterReturning(value = "actionRecordCheck()", returning = "result")
    public void afterAdvice(JoinPoint joinPoint) {
        /*public void afterReturn(JoinPoint joinPoint, Objects result) {*/


        ThreadLocal<Login> localUser = WebInterceptor.localUser;
        Login login = localUser.get();
        String loginUsername = login.getUsername();
        QueryWrapper<UserEntity> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("username", loginUsername);
        userQueryWrapper.eq("del_flag", 0);
        UserEntity userEntity = userMapper.selectOne(userQueryWrapper);
        String realname = userEntity.getRealname();


        //获取入参
        Object[] args = joinPoint.getArgs();

        String pageType = "用户管理页面";//页面路由
        String action = "";//操作
        //获取方法名
        String name = joinPoint.getSignature().getName();

        if (name.equals("saveUser")) {
            //添加
            action = "添加";

        }
        if (name.equals("delete")) {
            //删除
            action = "删除";
        }
        if (name.equals("updateUserxx")) {
            //更新
            action = "编辑";

        }
        //对入参进行处理
        if (ArrayUtils.isNotEmpty(args)) {
            //入参为对象
            UserEntity user = (UserEntity) Arrays.stream(args).filter(UserEntity.class::isInstance).collect(Collectors.toList()).get(0);
            String userRealname = user.getRealname();//获取创建用户的姓名
        }
        for (Object arg : args) {
            //String类型或者Integer等包装类,需要对入参数组进行重新赋值
            if (arg instanceof UserEntity) {
                String userRealName = ((UserEntity) arg).getRealname();//获取创建用户的姓名
                UserCodeRecord userCodeRecord = new UserCodeRecord();
                userCodeRecord.setUsername(loginUsername);
                userCodeRecord.setRealName(realname);
//                userCodeRecord.setPageType(pageType);
                Date date = new Date();
                userCodeRecord.setUpdateTime(date);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String format = sdf.format(date);
                userCodeRecord.setUpdateContent(realname + "在" + format + "在" + pageType + action + "用户名为" + userRealName + "的用户信息");
                userCodeRecordMapper.insert(userCodeRecord);
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三十七°6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值