java-自定义方法注解实现AOP面向切面编程

33 篇文章 1 订阅
本文介绍了如何在Java中定义一个用于保存或修改字典权限判断的注解`CommDictValidate`,并创建对应的切面类`CommDictValidateAspect`进行权限校验。注解用于标记需要权限控制的方法,切面类则处理这些方法,在执行前进行权限检查。通过注解的`message`属性可以自定义无权限时的提示信息。
摘要由CSDN通过智能技术生成

首先定义注解类
import java.lang.annotation.*;

/**
* @description: 保存或者修改字典权限判断注解
* @fileName: CommDictValidateAspect.java
* @author: Sure
* @createAt: 2021/12/13/013 16:14
* @updateBy: Sure
* @remark: 
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CommDictValidate {
    /**
     * 权限不足的默认提示信息
     */
    public static final String MESSAGE = "非超级管理员无法维护公共字典";

    /**
     * 无权限时的提示信息
     *
     * @return
     */
    String message() default MESSAGE;
}

定义切面类

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.data.annotation.Id;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import static 

/**
* @description: 保存字典权限控制切面
* @fileName: CommDictValidateAspect.java
* @author: Sure
* @createAt: 2021/12/13/013 16:16
* @updateBy: Sure
* @remark: 
* */
@Component
//@Configuration
@Aspect
@Slf4j
public class CommDictValidateAspect {

//改成自己注解的地址
@Pointcut("@annotation(com.**.**.base.common.server.common.annotation.CommDictValidate)")
    public void doAspect() {
        log.warn("进入字典保存权限校验注解:{}的处理切点", CommDictValidate.class.getName());
    }

    /**
     * 处理 CommDictValidate 注解的切面
    * @Param:  连接点
    * @return: 返回值
    */
    @Around("doAspect()")
    public Object around(ProceedingJoinPoint point){
        try {
            Long id=null;
            Field field = null;
            LoginUserInfo loginUserInfo= LoginUserContext.getLoginUserInfo();
            log.warn("进入字典保存权限校验注解:{}的处理切面", CommDictValidate.class.getName());
            Object[] args = point.getArgs();
            Object arg = args[0];
            //自己的逻辑判断
            if (ObjectUtils.isNotEmpty(arg)){
                JSONObject jsonObject=JSON.parseObject(JSON.toJSONString(arg));
                Long hospitalId = jsonObject.getLong("hospitalId");
 
                    });
                }
            }
            return null;
        }
        catch (Throwable throwable){
            log.error("字典保存权限校验异常",throwable);
            throw BusinessException.build(DictSaveOrUpdateErrorCodeEnum.PERMISSION_ASPECT_EX,throwable.getMessage());
        }

    }

    /**
     * 获取注解中的参数
     *
     * @param joinPoint 连接点
     * @return 注解元信息
     */
    private String getAnnotationMessage(JoinPoint joinPoint) {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        CommDictValidate annotation = method.getAnnotation(CommDictValidate.class);
        return annotation.message();
    }
}

最后放在方法的注释上即可生效

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值