SpringAop+自定义注解的使用
本文注意记录aop+自定义注解的简单使用。如有失误,请指正。
实现功能
该自定义注解使用到方法上面,表示该方法只能被管理员账号使用
创建自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 仅管理员岗位操作注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AdminOperate {
}
创建aop类
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 被注解的接口,只有管理员岗位用户才能操作
*/
@Slf4j
@Aspect // 必需
@Component // 必需
public class AdminOperateAop {
@Autowired
private IJobService jobService;
@Pointcut("@annotation(org.opsli.common.annotation.perm.AdminOperate)")
public void adminOperate(){}
@Around("adminOperate()")
public Object around(ProceedingJoinPoint point) throws Throwable{
/**
具体逻辑结合具体业务实现,以下仅供参考
*/
// 获取当前用户的岗位id
String userId = UserUtil.getUser().getId();
UserExtraModel userExtra = UserUtil.getUserExtraIgnoreDel(userId);
String jobId = userExtra.getJobId();
// 查询岗位是否是管理员岗位
Job job = jobService.getJobById(jobId);
String izAdmin = job.getIzAdmin();
if (StrUtil.equals(izAdmin, DictType.NO_YES_YES.getValue())){
return point.proceed();
}else {
throw new ServiceException(SystemMsg.NO_PERMISSIONS);
}
}
}
使用
/**
* 岗位表 查一条
* @param id 模型
* @return ResultWrapper
*/
@ApiOperation(value = "根据id查询一条记录")
@GetMapping("/getById")
@AdminOperate
public ResultWrapper<?> getById(@RequestParam("id") String id) {
Job job = IService.getJobById(id);
return ResultWrapper.getSuccessResultWrapper(job);
}
使用效果
调用的接口如果使用了注解则会进入aop类执行具体逻辑