日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

淺談基于SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解

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

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

注解可以實(shí)現(xiàn)很多功能,其中最主要的就是進(jìn)行代碼標(biāo)注,所以有時(shí)候注解也叫做標(biāo)注。使用起來(lái)也基本顧名思義,就是對(duì)代碼進(jìn)行標(biāo)注,簡(jiǎn)化部分代碼的邏輯。

下面我們就著手實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解,來(lái)對(duì)注解有一個(gè)基本的了解。

準(zhǔn)備@Permission 注解

注解本身的代碼很簡(jiǎn)單。下面實(shí)現(xiàn)的是一個(gè) @Permission 注解,為了方便使用,這里只提供一個(gè)屬性value,因?yàn)槿绻粋€(gè)注解中有一個(gè)名稱為value的屬性,且你只想設(shè)置value屬性(即其他屬性都采用默認(rèn)值或者你只有一個(gè)value屬性),那么可以省略掉“value=”部分。

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

一個(gè)簡(jiǎn)單的User類,包含 permissions 用于保存用戶的權(quán)限。

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

簡(jiǎn)單的 Service 類,用于判斷權(quán)限。

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

利用 SpringBoot 簡(jiǎn)單地設(shè)置切面,獲取注解并使用。這里直接

@Aspect@Componentpublic class PermissionAspect { // 需要修改為實(shí)際的 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強(qiáng)轉(zhuǎn)為MethodSignature MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); // 獲取參數(shù)注解,1維是參數(shù),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() + ' 無(wú)任何權(quán)限!'); return false; } if (!StringUtils.hasLength(permission.value())) { log.error(joinPoint.getSignature().toString() + '權(quán)限設(shè)置異常'); return false; } if (!user.getPermissions().contains(permission.value())) { log.error(joinPoint.getSignature().toString() +': '+user.getName() + ' 無(wú)權(quán)限: ' + permission.value()); return false; } return joinPoint.proceed();} } } return joinPoint.proceed(); }}ApplicationTests 類

簡(jiǎn)單的測(cè)試類,用于測(cè)試代碼。這里簡(jiǎn)單的配置一個(gè)用戶只有創(chuàng)建用戶的權(quán)限

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

輸出如下日志,證明權(quán)限設(shè)置起作用了。

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

到此這篇關(guān)于淺談基于SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解的文章就介紹到這了,更多相關(guān)SpringBoot 權(quán)限控制注解內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲开心激情| 久久www成人_看片免费不卡| 亚洲一区网站| 激情偷拍久久| 国产精品主播| 日本精品影院| 国产欧美亚洲一区| 日韩中文字幕1| 久久国产免费看| 青青草国产成人99久久| 国产高潮在线| 黄色aa久久| 精品久久影院| 私拍精品福利视频在线一区| 婷婷中文字幕一区| 欧美日韩日本国产亚洲在线 | 欧美久久一区二区三区| 亚洲专区一区| 91精品国产自产在线观看永久∴ | 日本99精品| 国产福利资源一区| 日韩黄色大片| 日韩精品三区四区| 亚洲欧美一级| 麻豆精品av| 久久精品国产99| 国产精品一区二区三区美女 | 六月婷婷综合| 夜夜嗨一区二区三区| 视频一区二区三区中文字幕| 夜夜嗨一区二区三区| 久久精品国产99国产精品| 午夜精品免费| 97久久亚洲| 丰满少妇一区| 国产精品av久久久久久麻豆网| 日韩精品一二三四| 伊人久久大香线蕉av超碰演员| 国产精品99久久久久久董美香| 91国内精品| 国产精品久久亚洲不卡| 久久国产99| 麻豆免费精品视频| 伊人精品视频| 91在线成人| 亚洲一区日韩| 卡一卡二国产精品| 天堂av在线一区| 精品五月天堂| 亚洲精品成人| 国产欧美一区二区色老头| 国产精品videossex久久发布 | 日韩欧美看国产| 午夜欧美巨大性欧美巨大| 中文久久精品| 精品久久电影| 亚洲激情二区| 欧美成人精品三级网站| 国产精品日本一区二区不卡视频 | se01亚洲视频 | 亚洲欧美日韩一区在线观看| 国产亚洲永久域名| 日本在线不卡视频一二三区| 欧美一级久久| 日本中文字幕视频一区| 视频一区二区三区在线| 亚洲精品网址| 国产理论在线| 欧美在线资源| 人人精品亚洲| 日本一二区不卡| 蜜桃久久久久| 国产精品一区高清| 日本色综合中文字幕| 欧美日韩色图| 在线亚洲精品| 一区二区亚洲视频| 国产欧美日本| 麻豆理论在线观看| 国产字幕视频一区二区| 999久久久国产精品| 精品视频久久| 日韩精品国产欧美| 中文精品电影| 日韩精品第一| 欧美成人aaa| 麻豆国产欧美日韩综合精品二区| 婷婷综合六月| 蜜臀va亚洲va欧美va天堂| 亚洲制服一区| 精品美女视频 | 日韩中出av| 国产精品99久久免费观看| av中文资源在线资源免费观看| 99国产精品视频免费观看一公开 | 精品久久国产一区| 精品国产一区二区三区性色av| 欧洲一级精品| 日韩一区二区三区精品| 久久99免费视频| 国产69精品久久| 野花国产精品入口| 波多野结衣久久精品| 免费久久精品视频| 麻豆一区在线| 国产一区日韩欧美| 久久在线91| 国产一区二区高清| 久久精品免费看| 中文精品在线| 欧美激情网址| 亚洲a级精品| 午夜精品网站| av资源亚洲| 国产精品va视频| 日韩午夜在线| 日韩一区三区| 国产伦精品一区二区三区千人斩 | 免播放器亚洲| 亚洲www免费| 国产精品1luya在线播放| 亚洲久草在线| av一区二区高清| 日本三级亚洲精品| 国产欧美精品| 欧美在线不卡| 久久国际精品| 综合国产精品| 日韩精品欧美| 精品久久久久中文字幕小说| 日本欧美一区二区| 综合一区在线| 欧美日韩午夜电影网| 日韩午夜av| 亚洲男女自偷自拍| 午夜久久av | 亚洲激情中文| 男人的天堂久久精品| 婷婷综合电影| 成人影视亚洲图片在线| 欧美色综合网| 欧美在线日韩| 久久超级碰碰| 国产精成人品2018| 亚洲女同av| 亚洲精品一区二区在线看| 国产91精品对白在线播放| 不卡av一区二区| 免费在线小视频| 欧美日韩一二三四| 香蕉久久国产| 性欧美长视频| 国产日韩免费| 国产高清亚洲| 色乱码一区二区三区网站| 国产精品亚洲一区二区三区在线观看| 欧美二区视频| 色综合视频一区二区三区日韩 | 欧美亚洲在线日韩| 国产精品外国| 国产调教精品| 久久尤物视频| 国产精品社区| 日韩av不卡在线观看| 美女在线视频一区| 婷婷综合社区| 国产极品一区| 夜鲁夜鲁夜鲁视频在线播放| 蜜桃av一区二区| 国产精品黄色| 久久久久久久久久久9不雅视频| 亚洲激情社区| 国产一区二区三区四区五区| 国内精品福利| 亚州精品视频| 中日韩男男gay无套| 欧美精品一线| 日韩福利在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 欧美1区2区3区| 国产一区丝袜| 福利一区在线| 久久久久久免费视频| 在线精品视频在线观看高清| 亚洲精品网址| 群体交乱之放荡娇妻一区二区| 国产模特精品视频久久久久| 日本久久一区| 精品淫伦v久久水蜜桃| 亚洲在线一区| 日本免费一区二区三区四区| 视频精品一区二区| 国产超碰精品| 久久av免费| 天堂av在线| 在线日韩av| 午夜久久一区| 日韩欧美一区免费| 国产一区二区三区四区五区传媒| 欧美日韩xxxx|