authorize(基於註解的權限認證框架)

一、是什麼

很多項目都會用到權限管理,目前流行的權限框架(Apache Shiro,Spring Security等)在使用的時候都覺得很繁瑣,特別是在一些小型的項目中。有時候我會想,如果通過註解的方式,直接把權限註解到訪問的接口方法上那該有多好。
authorize就是一個爲了解決這個問題,通過註解配置權限,藉助攔截器進行權限檢查的一個開源權限框架。使用起來就像下面這種感覺。

@Access("manage")
@RequestMapping("index")
public String index() {
    return "this is index page";
}

@Access是這個框架的註解。通過註解配置權限的方式,解決權限認證的問題,不管是寫代碼還是讀代碼,都感覺更清晰了許多。

二、如何用

2.1 快速使用

可以參照示例authorize-demo

2.1.1 引入maven依賴

<dependency>
    <groupId>com.github.sunbufu</groupId>
    <artifactId>authorize-starter</artifactId>
    <version>1.0.0-RELEASE</version>
</dependency>

2.1.2 實現IAuthorizeService

IAuthorizeService的實現類中,至少應該實現3個方法:

  1. 登錄方法:登錄成功後,把用戶信息存放到session
  2. 鑑權方法(authorize):通過比對用戶和請求方法的權限,返回該用戶是否可以訪問
  3. 鑑權失敗方法(authorizeFail):用戶沒有權限時,需要進行的處理方法

登錄:

public User logIn(String userName, String passWord, HttpSession session) {
    User user = users.get(userName);
    if (!user.getPassWord().equals(passWord)) {
        return null;
    }
    session.setAttribute(USER_SESSION_KEY, user);
    return user;
}

鑑權:

@Override
public boolean authorize(String[] access, HttpSession session) {
    User user = (User) session.getAttribute(USER_SESSION_KEY);
    if (user != null && user.getAccess() != null && user.getAccess().isEmpty()) {
        for (String requestAccess : access) {
            if (user.getAccess().contains(requestAccess)) {
                return true;
            }
        }
    }
    return false;
}

鑑權失敗:

@Override
public void authorizeFail(HttpServletRequest request, HttpServletResponse response) {
    response.sendRedirect("authorizeError?message=your account have not enought authority");
}

2.1.3 通過註解配置到controller

@Access("manage")
@RequestMapping("index")
public String index() {
    return "this is index page";
}

2.1.4 完成

authorize的目的是藉助註解,快速的完成一些簡單的權限管理功能,所以從使用到配置上力爭儘量的簡單、快捷。
完整示例地址authorize-demo

2.2 框架介紹

authorize框架主要包括authorize-coreauthorize-starter

2.2.1 authorize-core

authorize-core是整個框架的核心和主要的邏輯部分,主要包括註解Access、攔截器AccessInterceptor、權限認證接口IAuthorizeService

  1. IAuthorizeService主要包括3個方法的聲明,其中有2個方法必須實現:authorize(鑑權)和authorizeFail(鑑權失敗),1個方法選擇實現:authorizeSuccess(鑑權成功)。
  2. AccessInterceptor會攔截所有的請求,並對註解@Access的進行鑑權。首先會把註解在controller上的權限和註解在具體方法上的權限合併,然後調用IAuthorizeService實現類的鑑權方法authorize。成功調用authorizeSuccess(鑑權成功),失敗則調用authorizeFail(鑑權失敗)。

2.2.2 authorize-starter

authorize-starter是爲spring boot提供的一個快速配置。主要是配置了authorize-core的攔截器AccessInterceptor

三、總結

authorize是爲了快速便捷進行權限管理的開源框架,在github上開源地址是https://github.com/sunbufu/sunbufu-authorize。歡迎大家關注、加星,也歡迎大家隨時聯繫我[email protected],謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章