当前位置: 首页 > news >正文

springboot+自定义注解+AOP实现权限控制(一)

目录

一. 权限控制

二. 拦截器和AOP的区别

三. 自定义注解

 1. 元注解

2. @interface 

3. 注解的属性值 


通过自定义注解+AOP可以学习到:

1. 权限控制框架的底层的一些实现,以及权限控制的流程

2. 拦截器和AOP的区别

3. 通过自定义注解来学习spring注解的实现

一. 权限控制

在之前项目里的权限控制,一般会选择这几种方案:

1. shiro

2. spring security

3. JWT

4. 自定义拦截器

        简单来说使用后的感觉,shiro是基于过滤器,spring security是基于spring框架及拦截器,JWT使用token比较方便及前后端调试,自定义拦截器对权限控制的流程熟悉要求比较高,需要考虑的if else比较多。下面通过AOP的方式来学习spring security底层的一些实现。

二. 拦截器和AOP的区别

1. 拦截器
    Spring中拦截器有三个方法:preHandle,postHandle,afterCompletion,如public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)表示被拦截的URL对应的方法执行前的自定义处理,可以看出它是基于url级别。

    拦截器可以在方法执行之前(preHandle)和方法执行之后(afterCompletion)进行操作,回调操作(postHandle),可以获取执行的方法的名称,请求(HttpServletRequest),及参数名称,但无法获取参数的值。

2. AOP
    只能拦截Spring管理Bean的访问。这是关键的一点。AOP操作可以对操作进行横向的拦截,最大的优势在于它可以获取执行方法的参数( ProceedingJoinPoint.getArgs() ),对方法进行统一的处理。

三. 自定义注解

首先查看一个spring自带的注解,比如@RequestMapping,如图

可以看出,注解可以分为三部分

1. 元注解

2. @interface标识为注解

3. 注解的属性值

 1. 元注解

jdk自带的注解,用来注解其他注解。

1. @Target:
       被描述的注解可以用在什么地方,如标识本注解可以使用在类上/方法上。取值(ElementType)有:

    1.CONSTRUCTOR:用于描述构造
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部变量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

2. @Retention
       被描述的注解在什么范围内有效,如标识本注解在运行期间有效。取值(RetentionPoicy)有:

    1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)

3. @Documented
       标记注解,表示注解可以被API文档化

4. @Inherited
       标记注解,如果@Inherited修饰的注解用于一个class,则这个注解可被用于该class的子类。

2. @interface 

@interface用来声明一个注解。格式:public @interface 注解名 {定义体} 

3. 注解的属性值 

定义体里,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。如 :

String value() default "";  

String[ ] value() default {};

 在下文《springboot+自定义注解+AOP实现权控制(二)》中,一起学习和使用自定义注解和AOP的流程!

相关文章:

  • EasyRTC嵌入式音视频通话SDK:如何解决跨平台(Linix、Windows、ARM、物联网)、跨设备(Android、ios等)的兼容性难题?
  • 前端Vue3图像编辑功能(并生成mask图)
  • 我在哪,要去哪
  • Zbrush插件安装
  • Android Studio最后一个绑定JDK8的版本,但是官方下载是最新的,怎么下载Android Studio历史版本包,这篇文章帮你解决。
  • Java进阶核心技术解析:多线程、集合框架与反射深度实战
  • 车载网络测试【E2E-AUTOSAR E2E Profile 1】
  • 4.3--入门知识扫盲,IPv4的头部报文解析,数据报分片,地址分类(包你看一遍全部记住)
  • Docker搭建MySQL主从服务器
  • 电商无人直播防封指南:三要素构建智能防护(场景切换/实时互动/自动审核)
  • JavaScript日期区间计算
  • Docker换源加速(更换镜像源)详细教程(2025.3最新可用镜像,全网最详细)
  • Using SAP S4hana An Introduction for Business Users
  • 【机器学习-回归算法】
  • 宝石PDF,全新 PC 版本,全部免费
  • 本专栏开栏通知相关申明
  • 【电脑技巧】剪切板增强工具Ditto(详细介绍)
  • SvelteKit 最新中文文档教程(5)—— 页面选项
  • 在使用mybatis时遇到枚举的相关问题和解决
  • ngx_http_core_srv_conf_t
  • 阿尔巴尼亚执政党连续第四次赢得议会选举,反对党此前雇用特朗普竞选经理
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额5万元
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 海北州委常委、常务副州长桑本履新青海省供销社理事会主任