浅谈基于SpringBoot实现一个简单的权限控制注解
注解是JDK5.0引入的一种注释机制。注解可以作用在类型(类、接口、枚举等)、属性、方法、参数等不同位置,具体的JDK版本所支持的注解位置可参考java.lang.annotation.ElementType。此外还有注解的策略,也就是RetentionPolicy,这里不加赘述。
注解可以实现很多功能,其中最主要的就是进行代码标注,所以有时候注解也叫做标注。使用起来也基本顾名思义,就是对代码进行标注,简化部分代码的逻辑。
下面我们就着手实现一个简单的权限控制注解,来对注解有一个基本的了解。
准备
@Permission注解
注解本身的代码很简单。下面实现的是一个@Permission注解,为了方便使用,这里只提供一个属性value,因为如果一个注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略掉“value=”部分。
importjava.lang.annotation.*; @Target({ElementType.PARAMETER})//注解可用于参数 @Retention(RetentionPolicy.RUNTIME)//注解在运行时可由JVM读入 @Documented public@interfacePermission{ Stringvalue()default""; }
User类
一个简单的User类,包含permissions用于保存用户的权限。
importlombok.Data; @Data publicclassUser{ privateStringid; privateStringname; privateSetpermissions; }
UserService类
简单的Service类,用于判断权限。
@Service publicclassUserService{ publicbooleancheckCreatePermission(@Permission("创建用户")Useruser){ returntrue; } publicbooleancheckDeletePermission(@Permission("删除用户")Useruser){ returntrue; } }
PermissionAspect类
利用SpringBoot简单地设置切面,获取注解并使用。这里直接
@Aspect @Component publicclassPermissionAspect{ //需要修改为实际的Service所在的Package @Pointcut("execution(public*tk.yubarimelon.MongoDemo.service.*.*(..))") publicvoidpermissionCheck(){ } @Around("permissionCheck()") publicObjectbefore(ProceedingJoinPointjoinPoint)throwsThrowable{ Object[]params=joinPoint.getArgs(); //获取方法,此处可将signature强转为MethodSignature MethodSignaturesignature=(MethodSignature)joinPoint.getSignature(); Methodmethod=signature.getMethod(); //获取参数注解,1维是参数,2维是注解 Annotation[][]parameterAnnotations=method.getParameterAnnotations(); for(inti=0;iApplicationTests类
简单的测试类,用于测试代码。这里简单的配置一个用户只有创建用户的权限
@SpringBootTest classApplicationTests{ @Autowired UserServiceuserService; @Test voidcontextLoads(){ } @Test voidcheckUser(){ Useruser=newUser(); user.setName("小明"); Setpermissions=newHashSet<>(); permissions.add("创建用户"); user.setPermissions(permissions); System.out.println("checkCreatePermission"+userService.checkCreatePermission(user)); System.out.println("checkDeletePermission"+userService.checkDeletePermission(user)); } } 输出如下日志,证明权限设置起作用了。
checkCreatePermissiontrue
2021-01-3111:44:45.895ERROR12388---[ main]t.y.MongoDemo.aop.PermissionAspect :booleantk.yubarimelon.MongoDemo.service.UserService.checkDeletePermission(User):小明无权限:删除用户
checkDeletePermissionfalse
到此这篇关于浅谈基于SpringBoot实现一个简单的权限控制注解的文章就介绍到这了,更多相关SpringBoot权限控制注解内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!