一、业务场景

  当前本人参与开发的是一个业务中台系统,所谓的中台简单的理解就是把相同的功能给抽取出来。比如系统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. 微信小程序-页面跳转Tabbar

    官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 首先我们 ...

  2. 手写 Spring,写到简历上被怼?

    作者:小傅哥 博客:https://bugstack.cn 图书:https://u.jd.com/4LapTH4 沉淀.分享.成长,让自己和他人都能有所收获! 一直都有一个非常好的硬核项目在你我身边 ...

  3. PHP中的正则表达式相关函数

    PHP中的正则表达式相关函数 常用的正则函数 1.执行一个正则表达式匹配 int preg_match ( string pattern , string subject [, array & ...

  4. 2023牛客暑期多校训练营6 ABCEG

    比赛链接 A 题解 方法一 知识点:并查集,树形dp,背包dp. 因为需要路径中的最大值,因此考虑按边权从小到大加入图中,保证通过这条边产生贡献的点对已经全部出现. 在加边的同时进行树上背包,答案存在 ...

  5. 吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?

    敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper. 当然至于是否属实,其实一个人是否是海王,微信.QQ 聊天记录里面记得清清楚 ...

  6. RESTful架构与RPC架构

    RESTful架构与RPC架构 在RESTful架构中,关注点在于资源,操作资源时使用标准方法检索并操作信息片段,在RPC架构中,关注点在于方法,调用方法时将像调用本地方法一样调用服务器的方法. RE ...

  7. spring boot读取json文件并实现接口查询

    0.源码下载 https://download.csdn.net/download/IndexMan/84238085 1.说明 最近需要在spring boot项目启动时读取json文件并保存到Li ...

  8. SpringCloud SpringBoot 组件使用:SpringBoot Actuator

    基础篇 一.什么是Spring Actuator? spring-boot-starter-actuator模块是一个spring提供的监控模块.我们在开运行发过程中,需要实时和定时监控服务的各项状态 ...

  9. 在python中发送自定义消息

    .py import win32api, win32con, win32gui import win32gui_struct import ctypes from ctypes import * GU ...

  10. Frida 原理

    frida注入的主要思路: 1.找到目标进程,使用ptrace跟踪目标进程 2.获取mmap,dlpoen,dlsym等函数库的偏移 3.获取mmap,在目标进程申请一段内存空间,将在目标进程中找到存 ...