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

首頁 > 開發 > Java > 正文

spring boot 利用注解實現權限驗證的實現代碼

2024-07-14 08:42:56
字體:
來源:轉載
供稿:網友

這里使用 aop 來實現權限驗證

引入依賴

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-aop</artifactId></dependency>

定義注解

package com.lmxdawn.api.admin.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 后臺登錄授權/權限驗證的注解 *///此注解只能修飾方法@Target(ElementType.METHOD)//當前注解如何去保持@Retention(RetentionPolicy.RUNTIME)public @interface AuthRuleAnnotation {  String value();}

攔截實現登錄和權限驗證

package com.lmxdawn.api.admin.aspect;import com.lmxdawn.api.admin.annotation.AuthRuleAnnotation;import com.lmxdawn.api.admin.enums.ResultEnum;import com.lmxdawn.api.admin.exception.JsonException;import com.lmxdawn.api.admin.service.auth.AuthLoginService;import com.lmxdawn.api.common.utils.JwtUtils;import io.jsonwebtoken.Claims;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import java.lang.reflect.Method;import java.util.List;/** * 登錄驗證 AOP */@Aspect@Component@Slf4jpublic class AuthorizeAspect {  @Resource  private AuthLoginService authLoginService;  @Pointcut("@annotation(com.lmxdawn.api.admin.annotation.AuthRuleAnnotation)")  public void adminLoginVerify() {  }  /**   * 登錄驗證   *   * @param joinPoint   */  @Before("adminLoginVerify()")  public void doAdminAuthVerify(JoinPoint joinPoint) {    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();    if (attributes == null) {      throw new JsonException(ResultEnum.NOT_NETWORK);    }    HttpServletRequest request = attributes.getRequest();    String id = request.getHeader("X-Adminid");    Long adminId = Long.valueOf(id);    String token = request.getHeader("X-Token");    if (token == null) {      throw new JsonException(ResultEnum.LOGIN_VERIFY_FALL);    }    // 驗證 token    Claims claims = JwtUtils.parse(token);    if (claims == null) {      throw new JsonException(ResultEnum.LOGIN_VERIFY_FALL);    }    Long jwtAdminId = Long.valueOf(claims.get("admin_id").toString());    if (adminId.compareTo(jwtAdminId) != 0) {      throw new JsonException(ResultEnum.LOGIN_VERIFY_FALL);    }    // 判斷是否進行權限驗證    MethodSignature signature = (MethodSignature) joinPoint.getSignature();    //從切面中獲取當前方法    Method method = signature.getMethod();    //得到了方,提取出他的注解    AuthRuleAnnotation action = method.getAnnotation(AuthRuleAnnotation.class);    // 進行權限驗證    authRuleVerify(action.value(), adminId);  }  /**   * 權限驗證   *   * @param authRule   */  private void authRuleVerify(String authRule, Long adminId) {    if (authRule != null && authRule.length() > 0) {      List<String> authRules = authLoginService.listRuleByAdminId(adminId);      // admin 為最高權限      for (String item : authRules) {        if (item.equals("admin") || item.equals(authRule)) {          return;        }      }      throw new JsonException(ResultEnum.AUTH_FAILED);    }  }}

Controller 中使用

使用 AuthRuleAnnotation 注解, value 值就是在數據庫里面定義的 權限規則名稱

/** * 獲取管理員列表 */@AuthRuleAnnotation("admin/auth/admin/index")@GetMapping("/admin/auth/admin/index")public ResultVO index(@Valid AuthAdminQueryForm authAdminQueryForm,           BindingResult bindingResult) {  if (bindingResult.hasErrors()) {    return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());  }  if (authAdminQueryForm.getRoleId() != null) {    List<AuthRoleAdmin> authRoleAdmins = authRoleAdminService.listByRoleId(authAdminQueryForm.getRoleId());    List<Long> ids = new ArrayList<>();    if (authRoleAdmins != null && !authRoleAdmins.isEmpty()) {      ids = authRoleAdmins.stream().map(AuthRoleAdmin::getAdminId).collect(Collectors.toList());    }    authAdminQueryForm.setIds(ids);  }  List<AuthAdmin> authAdminList = authAdminService.listAdminPage(authAdminQueryForm);  // 查詢所有的權限  List<Long> adminIds = authAdminList.stream().map(AuthAdmin::getId).collect(Collectors.toList());  List<AuthRoleAdmin> authRoleAdminList = authRoleAdminService.listByAdminIdIn(adminIds);  // 視圖列表  List<AuthAdminVo> authAdminVoList = authAdminList.stream().map(item -> {    AuthAdminVo authAdminVo = new AuthAdminVo();    BeanUtils.copyProperties(item, authAdminVo);    List<Long> roles = authRoleAdminList.stream()        .filter(authRoleAdmin -> authAdminVo.getId().equals(authRoleAdmin.getAdminId()))        .map(AuthRoleAdmin::getRoleId)        .collect(Collectors.toList());    authAdminVo.setRoles(roles);    return authAdminVo;  }).collect(Collectors.toList());  PageInfo<AuthAdmin> authAdminPageInfo = new PageInfo<>(authAdminList);  PageSimpleVO<AuthAdminVo> authAdminPageSimpleVO = new PageSimpleVO<>();  authAdminPageSimpleVO.setTotal(authAdminPageInfo.getTotal());  authAdminPageSimpleVO.setList(authAdminVoList);  return ResultVOUtils.success(authAdminPageSimpleVO);}

相關地址

GitHub 地址: https://github.com/lmxdawn/vue-admin-java

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本免费一区二区三区视频观看| 91国内免费在线视频| 热99在线视频| 欧美久久精品午夜青青大伊人| 欧美亚洲激情视频| 欧美wwwxxxx| 久热精品视频在线观看一区| 欧美专区中文字幕| 国产欧美精品xxxx另类| 国产免费一区二区三区香蕉精| 日韩大胆人体377p| 欧美性xxxx在线播放| 欧美精品videossex性护士| 国产精品日日做人人爱| 2020欧美日韩在线视频| 欧美黄色片免费观看| 日韩电影中文字幕一区| 国产suv精品一区二区三区88区| 亚洲天天在线日亚洲洲精| 国产精品黄页免费高清在线观看| 亚洲自拍高清视频网站| 国产999精品久久久影片官网| 久久天天躁狠狠躁夜夜躁2014| 色噜噜亚洲精品中文字幕| 九九精品在线播放| 日韩中文字幕视频在线| 日本精品视频在线| 91精品国产综合久久香蕉| 欧美精品videosex性欧美| 久久天天躁夜夜躁狠狠躁2022| 九九九热精品免费视频观看网站| 亚洲美女www午夜| 亚洲综合第一页| 丁香五六月婷婷久久激情| 中文字幕在线亚洲| 主播福利视频一区| 欧美激情视频给我| 色噜噜狠狠狠综合曰曰曰88av| 亚洲欧美日韩一区在线| 亚洲在线免费看| 国产成人精品av| 亚洲国产精品电影| 欧美小视频在线观看| 欧美高清理论片| 欧美精品www| 欧美一级高清免费播放| 91精品久久久久久久| 国产精品久久久久秋霞鲁丝| 97在线免费观看视频| 国产在线观看91精品一区| 精品无人国产偷自产在线| 日韩欧美国产网站| 亚洲激情中文字幕| 欧美日韩久久久久| 欧美高清第一页| 亚洲аv电影天堂网| 久久精品国产一区二区电影| 久久精品成人欧美大片古装| 亚洲欧美一区二区三区久久| 久久久精品在线观看| 亚洲精品自拍第一页| 91视频免费在线| 97国产成人精品视频| 欧美精品在线视频观看| 成人h片在线播放免费网站| 国产综合久久久久久| 亚洲va久久久噜噜噜| 欧美性xxxxx| 美女福利视频一区| 欧美精品在线视频观看| 8090成年在线看片午夜| 成人激情视频网| 国产精品r级在线| 欧美电影在线免费观看网站| 欧美精品在线极品| 久久天天躁日日躁| 欧美贵妇videos办公室| 亚洲www永久成人夜色| 欧美亚洲激情在线| 久久久免费精品| 福利视频第一区| 欧美国产亚洲精品久久久8v| 福利视频一区二区| 日韩视频中文字幕| 一区二区三区视频免费在线观看| 亚洲网站在线看| 国产精品福利在线观看网址| 日本精品久久久| 成人激情视频在线观看| 欧美日韩国产va另类| 免费av一区二区| 自拍偷拍亚洲欧美| 欧美有码在线观看视频| 九九热这里只有精品免费看| 日韩不卡中文字幕| 日韩国产精品亚洲а∨天堂免| 国产主播在线一区| 国产69久久精品成人看| 国产成人精品电影久久久| 欧美激情久久久久| 亚洲人成自拍网站| 免费91麻豆精品国产自产在线观看| 成人欧美一区二区三区黑人| 国模gogo一区二区大胆私拍| 国产午夜精品一区理论片飘花| 影音先锋欧美精品| 精品国产成人av| 亚洲精品之草原avav久久| 久久久久日韩精品久久久男男| wwwwwwww亚洲| 北条麻妃久久精品| 久热在线中文字幕色999舞| 亚洲天堂av在线播放| 国产精品久久久久久久久久小说| 亚洲色图五月天| 亚洲精品不卡在线| 蜜月aⅴ免费一区二区三区| 亚洲无亚洲人成网站77777| 亚洲a∨日韩av高清在线观看| 夜夜嗨av一区二区三区四区| 不卡av电影在线观看| 亚洲免费伊人电影在线观看av| 亚洲激情视频在线观看| 欧美黑人视频一区| 91社区国产高清| 17婷婷久久www| 亚洲欧洲美洲在线综合| 尤物九九久久国产精品的分类| 国产69精品久久久久99| 亚洲欧美在线一区二区| 欧美激情欧美狂野欧美精品| 国产热re99久久6国产精品| 欧美专区日韩视频| 久久这里有精品视频| 亚洲网址你懂得| 亚洲一区二区三区四区在线播放| 91在线网站视频| 性欧美xxxx| 97超级碰碰人国产在线观看| 亚洲三级免费看| 久久全球大尺度高清视频| 亚洲社区在线观看| 欧美另类老女人| 亚洲视频一区二区| 日韩在线观看网址| 亚洲国产精品99| 色悠久久久久综合先锋影音下载| 欧美亚洲一区在线| 亚洲欧美三级伦理| 国产日本欧美一区二区三区| 久久久久久久电影一区| 成人精品久久久| 国产精品白嫩初高中害羞小美女| 亚洲精品在线不卡| 国产精品视频久久久久| 国产精品久久久久久久久影视| 国产91精品久久久久| 国产成人综合精品| 久久人人看视频| 精品激情国产视频| 久久精品国产亚洲| 亚洲一区美女视频在线观看免费| 欧美黄色免费网站| 亚洲精品第一页|