成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

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

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

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

注解是 JDK 5.0 引入的一種注釋機(jī)制。注解可以作用在類(lèi)型(類(lèi)、接口、枚舉等)、屬性、方法、參數(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è)名稱(chēng)為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 類(lèi)

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

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

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

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

利用 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 類(lèi)

簡(jiǎn)單的測(cè)試類(lèi),用于測(cè)試代碼。這里簡(jiǎn)單的配置一個(gè)用戶(hù)只有創(chuàng)建用戶(hù)的權(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)建用戶(hù)'); 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)限: 刪除用戶(hù)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)文章:
主站蜘蛛池模板: 在线毛片网站 | 亚洲风情第一页 | www.99精品| 欧美视频在线观看免费精品欧美视频 | 欧美三级成版人版在线观看 | 一级毛片视频免费观看 | 久草在线中文视频 | 国产在线拍揄自揄视精品不卡 | 亚洲国产精品综合久久20 | 久免费视频 | 亚州精品一区二区三区 | 久久91亚洲精品中文字幕 | 免费又黄又爽又猛大片午夜 | se94se最新网站 | 久久香蕉国产线看观看精品yw | 男人v天堂 | 欧洲亚洲综合一区二区三区 | 成年人在线免费网站 | 夜夜操影院 | 久草免费在线色站 | www.日本在线 | 国产成人免费影片在线观看 | 欧美成人特黄级毛片 | 国产精品色午夜视频免费看 | 久久香蕉国产线看观看亚洲片 | 亚洲一级在线观看 | 国产色手机在线观看播放 | 日韩精品一区二区三区高清 | 亚洲天堂视频在线观看免费 | 免费一级毛片在播放视频 | 欧美三级超在线视频 | 欧美大片毛片大片 | 国产三级毛片 | 日本aaaa片毛片免费观看 | 久草视频资源在线 | 看一级特黄a大一片 | 亚洲an日韩专区在线 | 日韩视频国产 | 国产精品激情丝袜美女 | 毛片免费观看的视频 | 久久视频6免费观看视频精品 |