天天看點

SpringBoot使用tools-auth進行權限驗證

簡單快速的在項目中進行權限驗證

一、導入依賴

<dependency>
    <groupId>cn.gjing</groupId>
    <artifactId>tools-auth</artifactId>
    <version>1.0.1</version>
</dependency>           

二、權限注解

該注解使用在API上,用于對使用者請求方法時進行身份認證

1、@RequiredPermissions

權限認證,請求的使用者需要存在該注解中設定的權限,否則抛出

PermissionAuthorizationException

參數 描述
value 需要的權限

2、@RequiredRoles

角色認證,請求的使用者需要存在該注解中設定的角色,否則抛出

RoleAuthorizationException

需要的角色

三、token生成器

主要用來生成Token和解析Token,使用時可以通過

@Resource

注解進行依賴注入

public class TestController {
    @Resource
    private TokenAssistant tokenAssistant;
    
    @GetMapping("/token")
    public void getToken() {
        Map<String, Object> map = new HashMap<>(16);
        map.put("user", "張三");
        String token = this.tokenAssistant.createToken(map);
        System.out.println("生成的token:" + map);
        System.out.println("解析token:" + this.tokenAssistant.parseToken(token));
    }
}           

四、啟動類增加注解

在項目啟動類增加

@EnableAuthorization

注解用于開啟項目權限校驗

五、設定權限認證監聽器

通過監聽器可以對使用者擁有的權限進行提供以及進行自己的認證校驗

/**
 * @author Gjing
 **/
@Component
public class MyListener implements AuthorizationListener {
    /**
     * 增加使用者的通路權限用于對增加了權限注解的方法進行身份認證,如果傳回null會抛出NoAccountException
     * 這裡模拟權限資料,給目前請求的使用者增加admin角色和add權限。實際使用時
     * 使用者權限你可以儲存在任何地方
     *
     * @param token 使用者Token
     * @return AuthorizationMetaData
     */
    @Override
    public AuthorizationMetaData supplyAccess(String token) {
        SimpleAuthorizationMetaData metaData = new SimpleAuthorizationMetaData();
        metaData.addRole("admin");
        metaData.addPermission("add");
        return metaData;
    }

    /**
     * 權限注解驗證通過後會觸發該方法,你可以在這裡做一些項目中自己的權限認證邏輯
     *
     * @param token 使用者Token
     */
    @Override
    public void authentication(String token) {

    }

    /**
     * 驗證全部通過後且方法執行完畢
     *
     * @param request HttpServletRequest
     * @param method  請求的方法
     */
    @Override
    public void authenticationSuccess(HttpServletRequest request, Method method) {
        System.out.println();
    }
}           

六、額外配置

可以通過這些配置控制攔截路徑和過濾路徑,以及token存在的請求頭名稱等等...yml檔案全部配置如下:

tools:
  auth:
    # 攔截的路徑
    path: /**
    # 排除的路徑
    filter: 
    # 生成token的加密方式
    type: hs256
    # token存放的請求頭名稱
    header: Authorization
    # 加密的鹽
    salt: