美文网首页
使用spring Aop实现后台权限验证

使用spring Aop实现后台权限验证

作者: Code人生 | 来源:发表于2020-02-17 14:31 被阅读0次

受疫情影响,还没开始上班,在家宅了那久,也该学习点东西了。今天来说说Aop,Aop 技术可以用来实现很多东西,最常见的就是做日志记录和缓存等。那么今天我来介绍一下怎么用Aop实现权限校验。

实现思路: 自定义注解,用Aop拦截自定注解在Aop中实现权限校验,话不多说,开始三部曲。

第一步: 新建一个springboot项目(需要web依赖),运行一下看项目是否可以正常运行,正常就可有进入下步了。

第二步:引入springAop依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

第三步:新建一个包xx.xx.annotation,用来放自定义注解,这里我就取名HasPermission吧,这里注解可以传多个值因此用数组。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface HasPermission {

 String[] value();
}

第四部:完成Aop的编写(核心)

@Aspect
@Component
public class PermissionAspect {
    
    //定义权限列表(实际应用中可以从数据库/缓存或session中获取)这里只是模拟
    private List<String> permissions = Arrays.asList("add","delete","update","list");
    
    //这里使用环绕通知切入自定义的注解即可
    @Around("@annotation(com.zzj.demo.annotation.HasPermission)")
    public Object point(ProceedingJoinPoint point){
        
        try {
            //1 获取当前执行的方法信息
            MethodSignature methodSignature = (MethodSignature) point.getSignature();
            Method method = methodSignature.getMethod();

            //2 获取方法上的注解,如果有权限注解就验证
            HasPermission annotation = method.getAnnotation(HasPermission.class);
            
            if(annotation!=null){

                String[] values = annotation.value();
                boolean has = permissions.containsAll(Arrays.asList(values));
                
                //有权限正常执行
                if(has){

                    return point.proceed();
                }
                //3 没有权限设置响应状态为403
                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                HttpServletResponse response = attributes.getResponse();
                response.setStatus(HttpStatus.FORBIDDEN.value());
                
            }

        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }


        return null;
    }


}

第五步:测试,编写控制器

 
@RestController
public class HomeController {


    @GetMapping
    public String  index(){

        return "首页";
    }


    @HasPermission("add")
    @GetMapping("/add")
    public String add(){

        return "add";
    }

    
    @GetMapping("/delete")
    @HasPermission("delete")
    public String delete(){

        return "delete";
    }

    @GetMapping("/update")
    @HasPermission("update")
    public String update(){

        return "update";
    }

    @GetMapping("/list")
    @HasPermission("list")
    public String list(){

        return "列表";
    }
}

修改Aop中的权限列表只保留一个add权限测试一下,非add则或出现403,ok,这样就实现了权限拦截了。

总结: 关于springAop实现权限校验就介绍完了,是不是很简单,其实这个没有多少干货,思路而已(自己的个人想法)。喜欢我的文章记得关注我哦😊!

最后,Demo源码地址: https://gitee.com/zzj1992/Spring-Aop-Permission.git

相关文章

网友评论

      本文标题:使用spring Aop实现后台权限验证

      本文链接:https://www.haomeiwen.com/subject/klebfhtx.html