亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 幫助中心 > 正文

Spring Boot 通過AOP和自定義注解實現權限控制的方法

2024-07-09 22:41:44
字體:
來源:轉載
供稿:網友

本文介紹了Spring Boot 通過AOP和自定義注解實現權限控制,分享給大家,具體如下:

源碼:https://github.com/yulc-coding/java-note/tree/master/aop

思路

自定義權限注解 在需要驗證的接口上加上注解,并設置具體權限值 數據庫權限表中加入對應接口需要的權限 用戶登錄時,獲取當前用戶的所有權限列表放入Redis緩存中 定義AOP,將切入點設置為自定義的權限 AOP中獲取接口注解的權限值,和Redis中的數據校驗用戶是否存在該權限,如果Redis中沒有,則從數據庫獲取用戶權限列表,再校驗

pom文件 引入AOP

  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <!-- AOP 切面-->  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-aop</artifactId>  </dependency>

自定義注解 VisitPermission

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface VisitPermission { /**  * 用于配置具體接口的權限值  * 在數據庫中添加對應的記錄  * 用戶登錄時,將用戶所有的權限列表放入redis中  * 用戶訪問接口時,將對應接口的值和redis中的匹配看是否有訪問權限  * 用戶退出登錄時,清空redis中對應的權限緩存  */ String value() default "";}

需要設置權限的接口上加入注解 @VisitPermission(value)

@RestController@RequestMapping("/permission")public class PermissionController { /**  * 配置權限注解 @VisitPermission("permission-test")  * 只用擁有該權限的用戶才能訪問,否則提示非法操作  */ @VisitPermission("permission-test") @GetMapping("/test") public String test() {  System.out.println("================== step 3: doing ==================");  return "success"; }}

定義權限AOP

設置切入點為@annotation(VisitPermission) 獲取請求中的token,校驗是否token是否過期或合法 獲取注解中的權限值,校驗當前用戶是否有訪問權限 MongoDB 記錄訪問日志(IP、參數、接口、耗時等)
@Aspect@Componentpublic class PermissionAspect { /**  * 切入點  * 切入點為包路徑下的:execution(public * org.ylc.note.aop.controller..*(..)):  * org.ylc.note.aop.Controller包下任意類任意返回值的 public 的方法  * <p>  * 切入點為注解的: @annotation(VisitPermission)  * 存在 VisitPermission 注解的方法  */ @Pointcut("@annotation(org.ylc.note.aop.annotation.VisitPermission)") private void permission() { } /**  * 目標方法調用之前執行  */ @Before("permission()") public void doBefore() {  System.out.println("================== step 2: before =================="); } /**  * 目標方法調用之后執行  */ @After("permission()") public void doAfter() {  System.out.println("================== step 4: after =================="); } /**  * 環繞  * 會將目標方法封裝起來  * 具體驗證業務數據  */ @Around("permission()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {  System.out.println("================== step 1: around ==================");  long startTime = System.currentTimeMillis();  /*   * 獲取當前http請求中的token   * 解析token :   * 1、token是否存在   * 2、token格式是否正確   * 3、token是否已過期(解析信息或者redis中是否存在)   * */  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();  HttpServletRequest request = attributes.getRequest();  String token = request.getHeader("token");  if (StringUtils.isEmpty(token)) {   throw new RuntimeException("非法請求,無效token");  }  // 校驗token的業務邏輯  // ...  /*   * 獲取注解的值,并進行權限驗證:   * redis 中是否存在對應的權限   * redis 中沒有則從數據庫中獲取權限   * 數據空中沒有,拋異常,非法請求,沒有權限   * */  Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod();  VisitPermission visitPermission = method.getAnnotation(VisitPermission.class);  String value = visitPermission.value();  // 校驗權限的業務邏輯  // List<Object> permissions = redis.get(permission)  // db.getPermission  // permissions.contains(value)  // ...  System.out.println(value);    // 執行具體方法  Object result = proceedingJoinPoint.proceed();  long endTime = System.currentTimeMillis();  /*   * 記錄相關執行結果   * 可以存入MongoDB 后期做數據分析   * */  // 打印請求 url  System.out.println("URL   : " + request.getRequestURL().toString());  // 打印 Http method  System.out.println("HTTP Method : " + request.getMethod());  // 打印調用 controller 的全路徑以及執行方法  System.out.println("controller  : " + proceedingJoinPoint.getSignature().getDeclaringTypeName());  // 調用方法  System.out.println("Method   : " + proceedingJoinPoint.getSignature().getName());  // 執行耗時  System.out.println("cost-time  : " + (endTime - startTime) + " ms");  return result; }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美欧洲在线观看| 久久精品国产亚洲7777| 午夜精品理论片| 91香蕉嫩草神马影院在线观看| 91精品国产高清自在线看超| 久久艹在线视频| 91高清视频免费观看| 亚洲电影天堂av| 亚洲精品久久久久| 中文字幕综合在线| 91精品国产综合久久香蕉922| 亚洲风情亚aⅴ在线发布| 日韩av免费看网站| 国内精品久久久久| 亚洲第一区在线观看| 91亚洲精品久久久久久久久久久久| 亚洲色图校园春色| 久久精品国产成人| 欧美一级免费视频| 久久高清视频免费| 性色av一区二区三区红粉影视| 国产精品国产自产拍高清av水多| 久久精品电影网站| 精品久久中文字幕| 日韩在线观看免费高清| 欧美乱妇40p| 国产精品欧美一区二区| 国产欧美婷婷中文| 狠狠色狠狠色综合日日小说| 亚洲电影av在线| 成人激情黄色网| 欧美日韩精品在线观看| 97婷婷大伊香蕉精品视频| 中文字幕亚洲无线码a| 欧美在线播放视频| 欧美成人合集magnet| 欧美黑人xxx| 国产精品精品一区二区三区午夜版| 在线亚洲午夜片av大片| 欧美激情一区二区三区高清视频| 久久久久久久久久久免费精品| 成人在线激情视频| 精品色蜜蜜精品视频在线观看| 国产精国产精品| 亚洲va欧美va国产综合剧情| 欧美日韩成人在线观看| 国产一区二中文字幕在线看| 国产一区二中文字幕在线看| 91精品国产99| 亚洲人免费视频| 川上优av一区二区线观看| 欧日韩在线观看| 91成人国产在线观看| 国产欧美日韩综合精品| 国产主播在线一区| 色yeye香蕉凹凸一区二区av| 韩国三级日本三级少妇99| 欧美色道久久88综合亚洲精品| 中文字幕免费精品一区| 日韩精品在线观看网站| 日韩在线观看高清| 91超碰中文字幕久久精品| 欧美黄色性视频| 久久久亚洲影院你懂的| 最好看的2019的中文字幕视频| 日韩在线观看视频免费| 久久精品国产亚洲| 国产精品亚洲网站| 久久久久久久久网站| 最好看的2019年中文视频| 欧美一区二区.| 91网站在线看| 欧美成人精品激情在线观看| 97超视频免费观看| 日韩av片电影专区| 丝袜美腿亚洲一区二区| 日韩亚洲一区二区| 欧美电影《睫毛膏》| 亚洲色图美腿丝袜| 亚洲成人黄色网址| 久久精品国产69国产精品亚洲| 日本韩国在线不卡| 国内外成人免费激情在线视频| 欧洲成人免费视频| 亚洲在线免费观看| 色在人av网站天堂精品| 亚洲精品久久久久中文字幕欢迎你| 久久精品男人天堂| 亚洲色图国产精品| 欧美福利视频在线观看| 欧美日韩在线第一页| 97视频在线观看网址| 亚洲精品之草原avav久久| 日韩精品在线视频观看| 日韩av手机在线| 亚洲国产精品高清久久久| 亚洲国产小视频在线观看| 亚洲第五色综合网| 日韩欧美精品中文字幕| www.午夜精品| 欧美日韩成人在线观看| 日韩激情视频在线播放| 国产精品福利在线观看网址| 欧美精品在线免费播放| 91网在线免费观看| 欧美精品成人91久久久久久久| 久久99视频免费| 国产福利精品在线| www.亚洲免费视频| 久久999免费视频| 日韩精品www| 精品国产乱码久久久久久虫虫漫画| 国产69精品久久久久9999| 日韩av一区在线观看| 亚洲第一页自拍| 亚洲天堂日韩电影| 欧美午夜影院在线视频| 国产国语videosex另类| 欧美一区二三区| 国产亚洲视频在线观看| 富二代精品短视频| 久久精品国产v日韩v亚洲| 国产精品十八以下禁看| 日韩精品免费电影| 亚洲欧美成人精品| 亚洲人成在线观看网站高清| 伊人久久大香线蕉av一区二区| 亚洲欧美日韩久久久久久| 亚洲电影免费观看| 久久久久久久久中文字幕| 中文字幕一区二区精品| 中文字幕亚洲欧美日韩在线不卡| 日韩国产一区三区| 国产一区二区在线免费| 欧美又大又硬又粗bbbbb| 最近2019年日本中文免费字幕| 97在线视频免费看| 色多多国产成人永久免费网站| 热99精品里视频精品| 国内成人精品视频| 九九九热精品免费视频观看网站| 国产亚洲欧洲高清| 黑人与娇小精品av专区| 精品亚洲一区二区| 九九精品在线观看| 国产精品丝袜久久久久久高清| 日韩中文字幕在线观看| 欧美电影免费观看高清完整| 精品亚洲国产成av人片传媒| 岛国视频午夜一区免费在线观看| 国产精品第一视频| 久久中文字幕在线| 成人在线精品视频| 91九色精品视频| 久久人人97超碰精品888| 黑人极品videos精品欧美裸| 欧美日韩国产va另类| 丝袜亚洲欧美日韩综合| 色综合老司机第九色激情| 久久久成人精品| 久热精品视频在线观看一区| 九九热精品视频| 日韩电影视频免费| 色偷偷av一区二区三区|