Spring Boot中使用自定义注解+AOP实现权限校验
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.stereotype.Component;
@Aspect
@Component
public class PermissionAspect {
// 定义切点,匹配带有@PermissionCheck注解的方法
@Pointcut("@annotation(PermissionCheck)")
public void permissionCheckPointcut() {
}
// 环绕通知,在匹配的方法执行前后进行权限检查
@Around("permissionCheckPointcut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
// 执行权限检查逻辑
if (!checkPermission()) {
// 如果权限检查失败,则抛出权限异常或者其他逻辑处理
throw new PermissionException("无权访问");
}
// 如果权限检查通过,继续执行原方法
return joinPoint.proceed();
}
// 模拟权限检查方法,实际应用中需要替换为具体的权限检查逻辑
private boolean checkPermission() {
// 这里只是示例,实际应用中需要查询数据库或者调用权限服务进行权限校验
// 返回true表示有权限,返回false表示无权限
return true;
}
}
// 自定义注解
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PermissionCheck {
}
// 权限异常类
public class PermissionException extends RuntimeException {
public PermissionException(String message) {
super(message);
}
}
在这个例子中,我们定义了一个自定义注解@PermissionCheck
,然后使用Aspect切面和@Around
注解来创建一个环绕通知,在目标方法执行前后进行权限检查。如果权限检查失败,则抛出PermissionException
异常。这个例子展示了如何在Spring Boot应用中使用AOP和自定义注解来实现一个简单的权限检查系统。
评论已关闭