国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring boot 利用注解實現(xiàn)權(quán)限驗證

keelii / 1471人閱讀

摘要:這里使用來實現(xiàn)權(quán)限驗證引入依賴定義注解后臺登錄授權(quán)權(quán)限驗證的注解此注解只能修飾方法當(dāng)前注解如何去保持?jǐn)r截實現(xiàn)登錄和權(quán)限驗證登錄驗證登錄驗證驗證判斷是否進(jìn)行權(quán)限驗證從切面中獲取當(dāng)前方法得到了方提取出他的注解進(jìn)行權(quán)限驗證權(quán)限驗證為最高

這里使用 aop 來實現(xiàn)權(quán)限驗證
引入依賴

    org.springframework.boot
    spring-boot-starter-aop
定義注解
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;

/**
 * 后臺登錄授權(quán)/權(quán)限驗證的注解
 */
//此注解只能修飾方法
@Target(ElementType.METHOD)
//當(dāng)前注解如何去保持
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthRuleAnnotation {
    String value();
}
攔截實現(xiàn)登錄和權(quán)限驗證
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
@Slf4j
public 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);
        }

        // 判斷是否進(jìn)行權(quán)限驗證
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //從切面中獲取當(dāng)前方法
        Method method = signature.getMethod();
        //得到了方,提取出他的注解
        AuthRuleAnnotation action = method.getAnnotation(AuthRuleAnnotation.class);
        // 進(jìn)行權(quán)限驗證
        authRuleVerify(action.value(), adminId);
    }

    /**
     * 權(quán)限驗證
     *
     * @param authRule
     */
    private void authRuleVerify(String authRule, Long adminId) {

        if (authRule != null && authRule.length() > 0) {

            List authRules = authLoginService.listRuleByAdminId(adminId);
            // admin 為最高權(quán)限
            for (String item : authRules) {
                if (item.equals("admin") || item.equals(authRule)) {
                    return;
                }
            }
            throw new JsonException(ResultEnum.AUTH_FAILED);
        }

    }

}
Controller 中使用
使用 AuthRuleAnnotation 注解, value 值就是在數(shù)據(jù)庫里面定義的 權(quán)限規(guī)則名稱
/**
 * 獲取管理員列表
 */
@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 authRoleAdmins = authRoleAdminService.listByRoleId(authAdminQueryForm.getRoleId());
        List ids = new ArrayList<>();
        if (authRoleAdmins != null && !authRoleAdmins.isEmpty()) {
            ids = authRoleAdmins.stream().map(AuthRoleAdmin::getAdminId).collect(Collectors.toList());
        }
        authAdminQueryForm.setIds(ids);
    }
    List authAdminList = authAdminService.listAdminPage(authAdminQueryForm);

    // 查詢所有的權(quán)限
    List adminIds = authAdminList.stream().map(AuthAdmin::getId).collect(Collectors.toList());
    List authRoleAdminList = authRoleAdminService.listByAdminIdIn(adminIds);

    // 視圖列表
    List authAdminVoList = authAdminList.stream().map(item -> {
        AuthAdminVo authAdminVo = new AuthAdminVo();
        BeanUtils.copyProperties(item, authAdminVo);
        List 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 authAdminPageInfo = new PageInfo<>(authAdminList);
    PageSimpleVO authAdminPageSimpleVO = new PageSimpleVO<>();
    authAdminPageSimpleVO.setTotal(authAdminPageInfo.getTotal());
    authAdminPageSimpleVO.setList(authAdminVoList);

    return ResultVOUtils.success(authAdminPageSimpleVO);

}
相關(guān)地址

GitHub 地址: https://github.com/lmxdawn/vu...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72376.html

相關(guān)文章

  • 使用JWT保護(hù)你的Spring Boot應(yīng)用 - Spring Security實戰(zhàn)

    摘要:創(chuàng)建應(yīng)用有很多方法去創(chuàng)建項目,官方也推薦用在線項目創(chuàng)建工具可以方便選擇你要用的組件,命令行工具當(dāng)然也可以。對于開發(fā)人員最大的好處在于可以對應(yīng)用進(jìn)行自動配置。 使用JWT保護(hù)你的Spring Boot應(yīng)用 - Spring Security實戰(zhàn) 作者 freewolf 原創(chuàng)文章轉(zhuǎn)載請標(biāo)明出處 關(guān)鍵詞 Spring Boot、OAuth 2.0、JWT、Spring Security、SS...

    wemall 評論0 收藏0
  • spring boot 基于外部權(quán)限系統(tǒng)擴(kuò)展Session Repository實現(xiàn)登陸權(quán)限驗證

    摘要:在進(jìn)行一些公司內(nèi)部系統(tǒng)開發(fā)中,經(jīng)常會需要對接公司內(nèi)部統(tǒng)一的權(quán)限管理系統(tǒng)進(jìn)行權(quán)限角色驗證等等。在實際開發(fā)過程中可以借助的實現(xiàn)權(quán)限驗證功能。 在進(jìn)行一些公司內(nèi)部系統(tǒng)開發(fā)中,經(jīng)常會需要對接公司內(nèi)部統(tǒng)一的權(quán)限管理系統(tǒng)進(jìn)行權(quán)限角色驗證等等。在實際開發(fā)過程中可以借助Spring的Session Repository實現(xiàn)權(quán)限驗證功能。實現(xiàn)步驟如下: 一、添加自定義Session注解EnableUse...

    thekingisalwaysluc 評論0 收藏0
  • Spring Boot實踐——三種攔截器的創(chuàng)建

    摘要:中的攔截器在開發(fā)中,攔截器是經(jīng)常用到的功能。該攔截器只能過濾請求,允許多個攔截器同時存在,通過攔截器鏈管理。當(dāng)時不再執(zhí)行后續(xù)的攔截器鏈及被攔截的請求。實現(xiàn)攔截器大致也分為兩種,一種是實現(xiàn)接口,另一種利用的注解或配置。 Spring中的攔截器   在web開發(fā)中,攔截器是經(jīng)常用到的功能。它可以幫我們驗證是否登陸、權(quán)限認(rèn)證、數(shù)據(jù)校驗、預(yù)先設(shè)置數(shù)據(jù)以及統(tǒng)計方法的執(zhí)行效率等等。今天就來詳細(xì)的談...

    fnngj 評論0 收藏0
  • Spring Boot [集成-Shiro]

    摘要:后面的文章將圍繞著集成來進(jìn)行展開。表示當(dāng)前已經(jīng)身份驗證或者通過記住我登錄的。表示當(dāng)前需要角色和。參考資料系列十五安全框架一基本功能權(quán)限管理學(xué)習(xí)資料使用手冊跟開濤學(xué)博客版跟開濤學(xué)版官方文檔 導(dǎo)讀: 在閱讀這篇文章之前假設(shè)你已經(jīng)對Apache Shiro(后面統(tǒng)一用Shiro作為代指)有了一定的了解,如果你還對Shiro不熟悉的話在這篇文章的結(jié)尾附有相關(guān)的學(xué)習(xí)資料,關(guān)于Shiro是用來做什...

    gclove 評論0 收藏0
  • Spring Boot [集成-Shiro]

    摘要:后面的文章將圍繞著集成來進(jìn)行展開。表示當(dāng)前已經(jīng)身份驗證或者通過記住我登錄的。表示當(dāng)前需要角色和。參考資料系列十五安全框架一基本功能權(quán)限管理學(xué)習(xí)資料使用手冊跟開濤學(xué)博客版跟開濤學(xué)版官方文檔 導(dǎo)讀: 在閱讀這篇文章之前假設(shè)你已經(jīng)對Apache Shiro(后面統(tǒng)一用Shiro作為代指)有了一定的了解,如果你還對Shiro不熟悉的話在這篇文章的結(jié)尾附有相關(guān)的學(xué)習(xí)資料,關(guān)于Shiro是用來做什...

    superw 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<