电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談基于SpringBoot實現一個簡單的權限控制注解

瀏覽:3日期:2023-03-26 10:11:59

注解是 JDK 5.0 引入的一種注釋機制。注解可以作用在類型(類、接口、枚舉等)、屬性、方法、參數等不同位置,具體的 JDK 版本所支持的注解位置可參考 java.lang.annotation.ElementType 。此外還有注解的策略,也就是 RetentionPolicy ,這里不加贅述。

注解可以實現很多功能,其中最主要的就是進行代碼標注,所以有時候注解也叫做標注。使用起來也基本顧名思義,就是對代碼進行標注,簡化部分代碼的邏輯。

下面我們就著手實現一個簡單的權限控制注解,來對注解有一個基本的了解。

準備@Permission 注解

注解本身的代碼很簡單。下面實現的是一個 @Permission 注解,為了方便使用,這里只提供一個屬性value,因為如果一個注解中有一個名稱為value的屬性,且你只想設置value屬性(即其他屬性都采用默認值或者你只有一個value屬性),那么可以省略掉“value=”部分。

import java.lang.annotation.*;@Target({ElementType.PARAMETER}) // 注解可用于參數@Retention(RetentionPolicy.RUNTIME) // 注解在運行時可由JVM讀入@Documentedpublic @interface Permission { String value() default '';}User 類

一個簡單的User類,包含 permissions 用于保存用戶的權限。

import lombok.Data;@Datapublic class User { private String id; private String name; private Set<String> permissions;}UserService 類

簡單的 Service 類,用于判斷權限。

@Servicepublic class UserService { public boolean checkCreatePermission(@Permission('創建用戶') User user) { return true; } public boolean checkDeletePermission(@Permission('刪除用戶') User user) { return true; }}PermissionAspect 類

利用 SpringBoot 簡單地設置切面,獲取注解并使用。這里直接

@Aspect@Componentpublic class PermissionAspect { // 需要修改為實際的 Service 所在的 Package @Pointcut('execution(public * tk.yubarimelon.MongoDemo.service.*.*(..))') public void permissionCheck() { } @Around('permissionCheck()') public Object before(ProceedingJoinPoint joinPoint) throws Throwable { Object[] params = joinPoint.getArgs(); // 獲取方法,此處可將signature強轉為MethodSignature MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); // 獲取參數注解,1維是參數,2維是注解 Annotation[][] parameterAnnotations = method.getParameterAnnotations(); for (int i = 0; i < parameterAnnotations.length; i++) { Object param = params[i]; Annotation[] annotations = parameterAnnotations[i]; if (!(param instanceof User) || annotations.length == 0) {continue; } for (Annotation annotation : annotations) {if (annotation.annotationType().equals(Permission.class)) { Permission permission = (Permission) annotation; User user = (User) param; if (CollectionUtils.isEmpty(user.getPermissions())) { log.error(user.getName() + ' 無任何權限!'); return false; } if (!StringUtils.hasLength(permission.value())) { log.error(joinPoint.getSignature().toString() + '權限設置異常'); return false; } if (!user.getPermissions().contains(permission.value())) { log.error(joinPoint.getSignature().toString() +': '+user.getName() + ' 無權限: ' + permission.value()); return false; } return joinPoint.proceed();} } } return joinPoint.proceed(); }}ApplicationTests 類

簡單的測試類,用于測試代碼。這里簡單的配置一個用戶只有創建用戶的權限

@SpringBootTestclass ApplicationTests { @Autowired UserService userService; @Test void contextLoads() { } @Test void checkUser() { User user = new User(); user.setName('小明'); Set<String> permissions = new HashSet<>(); permissions.add('創建用戶'); user.setPermissions(permissions); System.out.println('checkCreatePermission ' + userService.checkCreatePermission(user)); System.out.println('checkDeletePermission ' + userService.checkDeletePermission(user)); }}

輸出如下日志,證明權限設置起作用了。

checkCreatePermission true2021-01-31 11:44:45.895 ERROR 12388 --- [ main] t.y.MongoDemo.aop.PermissionAspect : boolean tk.yubarimelon.MongoDemo.service.UserService.checkDeletePermission(User): 小明 無權限: 刪除用戶checkDeletePermission false

到此這篇關于淺談基于SpringBoot實現一個簡單的權限控制注解的文章就介紹到這了,更多相關SpringBoot 權限控制注解內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 设计圈 - 让设计更有价值!| 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 欧必特空气能-商用空气能热水工程,空气能热水器,超低温空气源热泵生产厂家-湖南欧必特空气能公司 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌 |