使用Spring实现权限控制动态为注解赋值
首先这不是一个介绍或者使用SpringSecurity的博客。他是使用自定义注解和拦截器实现的权限管理(只供学习不可用于生产环境)技术栈:SpringBoot 2.1.6MySQL5.7大体思路:使用拦截器拦截请求在拦截器中使用 HandlerMethod 类获取当前请求方法上的自定义权限注解。判断是否有此访问权限。动态改变注解值实际生产环境中不同角色拥有的权限不可能一直不发生改变首先实现第一步创建两个注解Retention(RetentionPolicy.RUNTIME)Target(ElementType.TYPE)publicinterfaceMyClass{// 放置在类上}Retention(RetentionPolicy.RUNTIME)Target(ElementType.METHOD)publicinterfaceMyTest{String[]v()default{-1};// 防止在方法上// v() 中保存的是权限ID 默认-1 即没有任何角色可以访问}编写一个Controller并添加注解RestControllerRequestMapping(/myController)MyClasspublicclassMyController{RequestMapping(/get)MyTest(v{1,2,3})// 赋值上角色ID为 123才能访问publicStringget(){returnHello,world;}RequestMapping(/set)MyTestpublicStringset(){returnHello,world;}}编写拦截器不要忘记使用这个拦截器packagecom.annie.interceptor;importcom.alibaba.fastjson.JSON;importcom.annie.annotation.MyTest;importorg.springframework.stereotype.Component;importorg.springframework.web.method.HandlerMethod;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.lang.reflect.Method;ComponentpublicclassMyInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throwsException{HandlerMethod handlerMethod(HandlerMethod)handler;Method methodhandlerMethod.getMethod();MyTest annotationmethod.getAnnotation(MyTest.class);if(annotation!null){// 从 request 或者 session 中获取当前请求角色String roleId1;// 假定请求角色的权限ID为1String[]vannotation.v();// 获取权限for(String s:v){if(s.equals(roleId)){// 判断是否拥有访问权限returntrue;}}returnfalse;}returnfalse;}}到此一个简单的权限判断就算是完成了但是我们不能预知一个方法可以使用的所有角色。所以我们要在使用一个方法让这个注解可以动态赋值。因为我们使用的是Spring框架Spring在项目启动初期就将所有的Bean收集起来了。我们这要拿到那个容器就可以拿到当前项目中所有方法。在通过去数据库类比。为每个自定义注解动态设置值。packagecom.annie.task;importcom.alibaba.fastjson.JSON;importcom.annie.annotation.MyClass;importcom.annie.annotation.MyTest;importorg.springframework.beans.BeansException;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;importjava.lang.reflect.*;importjava.util.Map;ComponentpublicclassMyTaskimplementsApplicationContextAware{privateApplicationContext applicationContext;// 保存所有Bean的容器Scheduled(fixedRate1000)publicvoidtask01()throwsClassNotFoundException,NoSuchFieldException,IllegalAccessException{MapString,ObjectbeansWithAnnotationthis.applicationContext.getBeansWithAnnotation(MyClass.class);for(String key:beansWithAnnotation.keySet()){// 反射获取类这里有一个问题。我在使用 Swagger2 时添加了注解。用于Swagger2使用了动态代理我拿不到注解数据。// 于是这个我提供一个备用方案。 获取这个类的名称然后 通过 Class.forName() 获取注解值Object testControllerbeansWithAnnotation.get(key);Class?aClasstestController.getClass();Method[]methodsaClass.getDeclaredMethods();for(Method m:methods){MyTest annotationm.getAnnotation(MyTest.class);if(annotationnull){continue;}// 获取代理处理器InvocationHandler invocationHandlerProxy.getInvocationHandler(annotation);// 过去私有 memberValues 属性Field finvocationHandler.getClass().getDeclaredField(memberValues);f.setAccessible(true);// 获取实例的属性mapMapString,ObjectmemberValues(MapString,Object)f.get(invocationHandler);// 修改属性值String arr[]{1,2};memberValues.put(v,arr);System.out.println(JSON.toJSONString(annotation.v()));}}}OverridepublicvoidsetApplicationContext(ApplicationContext applicationContext)throwsBeansException{this.applicationContextapplicationContext;}}我这里懒得获取数据库中的值进行类比。直接写的死值。项目下载下载扩展内容github个人博客

相关新闻

SpringBoot+Vue构建问卷调查系统的技术实践

SpringBoot+Vue构建问卷调查系统的技术实践

1. 项目概述这个基于SpringBootVueMySQL的问卷调查系统是一个典型的毕业设计项目,它完整实现了问卷创建、发布、填写和统计分析的闭环流程。作为前后端分离架构的实践案例,它既包含了基础CRUD功能,又涉及了数据可视化、权限控制等进阶特性&am…

2026/7/28 16:41:35 阅读更多 →
PAT甲级 1060 Are They Equal 判断两个小数是否相等

PAT甲级 1060 Are They Equal 判断两个小数是否相等

Solution: 题目要求:给出两个非负的小数,且都不超过10的100次方。再给出一个有效位数,将这两个小数都转化为科学计数法的形式,即0.d[1]…d[N]*10^k (d[1]>0 除非这个数是0),若转化后的两数相等&#xff…

2026/7/28 16:41:34 阅读更多 →
FlashDB嵌入式数据库深度解析:架构设计与核心实现原理

FlashDB嵌入式数据库深度解析:架构设计与核心实现原理

FlashDB嵌入式数据库深度解析:架构设计与核心实现原理 【免费下载链接】FlashDB An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库 项目地址: https://gitcode.com/gh_mirrors/fl/Flas…

2026/7/28 16:41:34 阅读更多 →

最新新闻

【独家】MIT+DeepMind联合泄露报告:2026年前AI将突破因果推理瓶颈——附5个已验证的产业级应用信号

【独家】MIT+DeepMind联合泄露报告:2026年前AI将突破因果推理瓶颈——附5个已验证的产业级应用信号

更多请点击: https://intelliparadigm.com 第一章:AI因果推理突破的范式转移与历史坐标 传统机器学习长期囿于相关性建模,将“统计拟合”误作“机制理解”。而近年来,以Pearl的do-calculus为理论基石、结合结构因果模型&#xff…

2026/7/28 16:52:39 阅读更多 →
2012-2018普及组第一题题解

2012-2018普及组第一题题解

noip2018 标题统计 【题目描述】 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。 【输入】 输入文…

2026/7/28 16:52:39 阅读更多 →
免费轻量级散热控制:3分钟让你的Dell G15告别过热卡顿

免费轻量级散热控制:3分钟让你的Dell G15告别过热卡顿

免费轻量级散热控制:3分钟让你的Dell G15告别过热卡顿 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为游戏本散热问题烦恼吗?当你…

2026/7/28 16:52:39 阅读更多 →
Leaf size is too small for the input dataset 解决办法

Leaf size is too small for the input dataset 解决办法

问题描述 在使用PCL的voxelgrid filter时,若点云过大,而设置的voxel比较小,可能会导致voxel的数量超过int32的上限,从而会出现警告:“Leaf size is too small for the input dataset”。 通用解决办法 此文提出了几…

2026/7/28 16:52:39 阅读更多 →
晴神机试模拟题选解

晴神机试模拟题选解

晴神机试模拟题选解 题目一:next[i] 在字符串匹配的KMP算法中有一个重要的概念是next数组,求解它的过程让不少同学伤透了心。next数组的直接语义其实是:使“长度为L的前缀”与“长度为L的后缀”相同的最大L,且满足条件的前后缀不能是原字符串本身。 例如对字符串"aba…

2026/7/28 16:52:39 阅读更多 →
GPT 5.6 超长上下文调优,大型代码库持续检索稳定方案

GPT 5.6 超长上下文调优,大型代码库持续检索稳定方案

大型代码库动辄几万行,想让AI理解整个项目几乎是不可能的——一次塞不进去,分段又丢了上下文。GPT-5.6的上下文窗口是128K tokens,听起来不小,但对一个5万行的项目来说连五分之一都装不下。怎么在有限的窗口里实现"持续稳定的…

2026/7/28 16:51:39 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻