一、业务场景

  当前本人参与开发的是一个业务中台系统,所谓的中台简单的理解就是把相同的功能给抽取出来。比如系统A、B、C、D都需要进行用户登录操作,那么可以把用户信息管理这一块抽取出来为一个独立的系统E,这个系统只负责与用户相关的操作,比如登录、退出、授权,修改密码等等。然后让A/B/C/D这四个系统来调用系统E进行登录操作,这样A/B/C/D系统就不需要与用户登录相关的操作,可以专注于自己本身系统的业务处理。

自己所在的这个项目组也是在做类似的事情,将其他系统中的一些共有的功能给抽取出来,做成一个独立的系统供其他系统调用。我们做的系统当中也没有登录操作,用户权限控制这一块全部都是交给另外一个系统去完成,然后我们的系统需要和其他系统进行对接,来完成登录和权限相关的处理,比如某个用户可以查看哪些菜单,可以操作哪些功能等等。

二、需求分析

  首先登录操作都是在其他系统中完成的,登录完成后就开始在我们自己的系统中获取数据,最开始获取的就是与权限相关的数据,在之后的每一步操作中在去判断某个用户是否有操作某个功能的具体权限。初期打算这样设计,对于99%的业务操作都会将请求发送到Controller中,然后在判断是否有操作权限,有则放行,没有则返回。可是如何来实现这个功能呢?需要在每一个请求的接口中添加多个权限,某一个接口可能会被不同的地方调用。

三、解决方案

  首先考虑到的一点就是最好是使用注解,因为注解可以在多个地方被使用,并且注解可以添加各种参数来实现想要的功能。下一个需要考虑的问题是,添加注解后如何拿到这个注解当中的一些值或者说是数据,然后在进行最后的处理,而且这种方式是通用的。有几种方式是可以统一处理的,一个是过滤器,一个是拦截器,还有一个是AOP面向切面编程。考虑再三,最终选择使用AOP面向切面编程来进行处理。首先写好一个注解如下

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

    /*
     * 注解权限
     */
    String [] authResourceList() default {};
}

然后写一个AOP的处理类如下:

@Aspect
@Component
public class AuthResourceAspect {

@Pointcut("@annotation(test.controller.aop.AuthResource)")
private void execute() {}

@Before(value = "execute() && @annotation(authResource)")
public void temp(JoinPoint joinPoint, AuthResource authResource){
System.out.println("校验逻辑" + Arrays.toString(authResource.authResourceList()));
    }
}

Controller中的用法如下:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {

@GetMapping("/1")
@AuthResource(authResourceList = "temp")
public String test() {
return "abc";
}
}

最后测试的结果如下:

正确的获取到访问某个方法时,注解里面的值。然后将该用户原有的权限列表和这个值进行比较,包含则表示有权限放行,

不包含则直接抛出异常信息,暂无权限访问。

参考博客.

https://blog.csdn.net/chali1314/article/details/115618777

AOP+自定义注解实现权限校验-2022新项目的更多相关文章

  1. springboot通过AOP和自定义注解实现权限校验

    自定义注解 PermissionCheck: package com.mgdd.sys.annotation; import java.lang.annotation.*; /** * @author ...

  2. AOP自定义注解鉴权

    刚出来工作那会或者在学校的时候,经常听到说AOP(面向对象编程,熟称切面)的用途是日志.鉴权等.但是那会不会,后面学会了,又没有写博客记录,今天写给大伙,希望能帮到大家 一.学习目标:利用AOP+自定 ...

  3. 使用AOP+自定义注解完成spring boot的接口权限校验

    记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ...

  4. 利用Spring AOP自定义注解解决日志和签名校验

    转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...

  5. (转)利用Spring AOP自定义注解解决日志和签名校验

    一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ...

  6. ssm+redis整合(通过aop自定义注解方式)

    此方案借助aop自定义注解来创建redis缓存机制. 1.创建自定义注解类 package com.tp.soft.common.util; import java.lang.annotation.E ...

  7. spring AOP自定义注解方式实现日志管理

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  8. spring AOP自定义注解 实现日志管理

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  9. SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!

    往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)we ...

  10. redis分布式锁-spring boot aop+自定义注解实现分布式锁

    接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ...

随机推荐

  1. 深入浅出Java多线程(二):Java多线程类和接口

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第二篇内容:Java多线程类和接口.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代计算机系统中,多线程 ...

  2. 【一】LaTeX的安装和使用、安装TeXstudio、中文界面输出设置

    安装方法一:(推荐) 下载链接·:http://tug.org/texlive/acquire-netinstall.html 下载zip,然后运行Windows批处理脚本(install-tl-wi ...

  3. 7.6 Windows驱动开发:内核监控FileObject文件回调

    本篇文章与上一篇文章<内核注册并监控对象回调>所使用的方式是一样的都是使用ObRegisterCallbacks注册回调事件,只不过上一篇博文中LyShark将回调结构体OB_OPERAT ...

  4. 植物大战僵尸:寻找阳光掉落Call

    本次实验内容:本次实验将接触到Call调用这个概念,什么是Call调用? Call相当于你在编程时所编写的函数,而高级语言中的函数最终也是会被编译器转换为汇编格式的Call调用,这些关键Call普遍都 ...

  5. 【操作系统到计网从入门到深入】(一)Linux基础知识预备

    前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记,所以如果是博主比较熟悉的知识点,博主可能就直接跳过了,但是所有重要的知识点,在这个专栏里面都会提到!而且我也一定会保证这个专栏知识点的完整 ...

  6. hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached

    windows 的hyper-v 安装了 centos 或者龙蜥 操作系统,会一直提示这个信息: hv_balloon: Balloon request will be partially fulfi ...

  7. Hadoop组件兼容性

    (1)HBase和Hadoop.zookeeper.JDK兼容版本 参考网址: https://hbase.apache.org/book.html 1)JDK和Hbase的兼容版本  对于JDK,最 ...

  8. Linux Shell获取指定日期 N 天/月/年前(后)的日期

    我们有时候在写批处理 Shell 脚本时,可能需要获取指定日期前(后) N 天/月/年的日期,这里的 N 可以是 1 天/月/年.2 天/月/年.3 天/月/年等等.方法其实很简单,这里做一个简单记录 ...

  9. ABC 310

    E \(dp[i][j]\) 表示前 \(i\) 个里有多少个后缀答案为 \(j\). \(if (c[i] == '0') \{\) \(dp[i][0] = 1;\) \(dp[i][1] = d ...

  10. 提升正则读写效率,超好用的正则图解工具Regulex与在线调试工具regexr

    壹 ❀ 引 正则表达式可以说是不少开发者心中的一根刺,平时使用场景好像也不多,但一旦要用写起来又有些头疼.抱着长痛不如短痛的想法,我曾在2019年年末,花了半个月时间完整读完了老姚的正则迷你书,并在博 ...