authorize(基於註解的許可權認證框架)
阿新 • • 發佈:2019-02-17
一、是什麼
很多專案都會用到許可權管理,目前流行的許可權框架(Apache Shiro,Spring Security等)在使用的時候都覺得很繁瑣,特別是在一些小型的專案中。有時候我會想,如果通過註解的方式,直接把許可權註解到訪問的介面方法上那該有多好。
authorize
就是一個為了解決這個問題,通過註解配置許可權,藉助攔截器進行許可權檢查的一個開源許可權框架。使用起來就像下面這種感覺。
@Access("manage")
@RequestMapping("index")
public String index() {
return "this is index page" ;
}
@Access
是這個框架的註解。通過註解配置許可權的方式,解決許可權認證的問題,不管是寫程式碼還是讀程式碼,都感覺更清晰了許多。
二、如何用
2.1 快速使用
2.1.1 引入maven依賴
<dependency>
<groupId>com.github.sunbufu</groupId>
<artifactId>authorize-starter</artifactId>
<version>1.0.0-RELEASE</version>
</dependency >
在IAuthorizeService
的實現類中,至少應該實現3個方法:
- 登入方法:登入成功後,把使用者資訊存放到
session
中 - 鑑權方法(
authorize
):通過比對使用者和請求方法的許可權,返回該使用者是否可以訪問 - 鑑權失敗方法(
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-core
和authorize-starter
。
authorize-core
是整個框架的核心和主要的邏輯部分,主要包括註解Access
、攔截器AccessInterceptor
、許可權認證介面IAuthorizeService
。
IAuthorizeService
主要包括3個方法的宣告,其中有2個方法必須實現:authorize
(鑑權)和authorizeFail
(鑑權失敗),1個方法選擇實現:authorizeSuccess
(鑑權成功)。AccessInterceptor
會攔截所有的請求,並對註解@Access
的進行鑑權。首先會把註解在controller
上的許可權和註解在具體方法上的許可權合併,然後呼叫IAuthorizeService
實現類的鑑權方法authorize
。成功呼叫authorizeSuccess
(鑑權成功),失敗則呼叫authorizeFail
(鑑權失敗)。
authorize-starter
是為spring boot
提供的一個快速配置。主要是配置了authorize-core
的攔截器AccessInterceptor
。