用JWT,AOP切面和自定义注解做一个Springboot权限控制
00 分钟
2024-12-23
2024-12-23
type
status
date
slug
summary
tags
category
icon
password
💡
前言:
某些控制器的方法是不能给大家随便访问的,那么可不可以通过JWT的token和AOP还有自定义注解来实现一个权限控制?
在现代Web应用中,确保不同用户拥有不同的访问权限是至关重要的。为了实现这一目标,可以通过结合JWT(JSON Web Token)、AOP(面向切面编程)以及自定义注解来构建一个灵活的权限控制系统。这种方法不仅提高了代码的可维护性和可读性,还能有效地控制不同用户对控制器方法的访问权限。
 

用JWT,AOP切面和自定义注解做一个Springboot权限控制

过程

第一步 引入相关依赖

pom.xml引入依赖

第二步 新建一个自定义注解

notion image
@Target(ElementType.METHOD)@Target 是一个元注解(meta-annotation),用于指定自定义注解可以用于哪些元素上。元注解是指用来定义其他注解的注解。ElementType.METHOD 表示该注解可以应用于方法元素上。这意味着 CheckPermission 注解只能被用在类的方法上,而不能用于类、字段、参数等其他元素。@Retention(RetentionPolicy.RUNTIME)@Retention 是另一个元注解,用于指定自定义注解在什么级别保留其信息。RetentionPolicy.RUNTIME 表示该注解的信息在运行时会被保留在 JVM 中,可以通过反射机制访问到。这意味着在程序运行时,可以通过注解处理器来检查和使用 CheckPermission 注解的信息,这对于需要在运行时进行权限检查的场景非常有用。

第三步 自定义异常类处理权限不足异常

创建一个自定义异常类UnauthorizedException,用于在权限校验失败时抛出异常。
notion image

第四步 对注解进行切面

定义一个前置通知,它会在所有带有 @CheckPermission 注解的方法执行之前先执行 checkPermission 方法
从request里面获取jwt的token然后根据之前生成token时写入中间部分的用户信息判断用户的权限
notion image
  • 切点定义: 使用@Pointcut注解定义切点,匹配所有带有@CheckPermission注解的方法。
    • 环绕通知: 使用@Around注解定义一个环绕通知,在方法执行前后进行权限校验。 从当前请求中获取HTTP请求对象。 从请求头中获取JWT token,并进行基本的格式校验。 使用JWT密钥解析token,提取用户信息。 获取当前方法的@CheckPermission注解值,提取所需的权限信息。 从JWT中提取用户的权限信息,并与所需的权限进行比较。 如果权限不足,则抛出UnauthorizedException异常;否则,继续执行目标方法。
notion image

第五步 在需要加权限校验的控制器方法前加上注解

例如:在删除用户操作前加上权限校验
notion image
 

总结

通过结合Spring Boot的AOP特性、自定义注解以及JWT,我们实现了一个高效的权限控制系统。以下是主要步骤的总结:
1.引入依赖:在pom.xml中添加Spring Boot AOP和JWT相关的依赖。 2.创建自定义注解:@CheckPermission用于标记需要权限校验的方法。 3.定义异常类:创建PermissionException用于处理权限不足的情况。 4.实现切面:定义一个切面类PermissionAspect,在带有@CheckPermission注解的方法执行前进行权限校验。 5.应用注解:在需要权限控制的控制器方法上添加@CheckPermission注解,指定所需的权限标识。
不仅简化了权限控制的实现过程,还提高了代码的可维护性和可扩展性。通过这种方式,可以灵活地管理不同用户的访问权限,确保应用的安全性。
 
💡
有关本文或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 
notion image
上一篇
Steam破解教程
下一篇
C语言课设实现学生成绩信息管理系统