sa-token 之註解式鑑權
阿新 • • 發佈:2021-01-21
註解式鑑權
前言
有同學表示:儘管使用程式碼鑑權非常方便,但是我仍希望可以把鑑權邏輯和業務邏輯分離開來,我可以使用註解鑑權嗎?
當然可以!身為自詡java最強許可權認證框架,怎麼能少的了註解鑑權這一標配功能呢?
- @SaCheckLogin: 標註在方法或類上,當前會話必須處於登入狀態才可通過校驗
- @SaCheckRole(“admin”):標註在方法或類上,當前會話必須具有指定角色標識才能通過校驗
- @SaCheckPermission(“user:add”):標註在方法或類上,當前會話必須具有指定許可權才能通過校驗
sa-token內建兩種模式完成註解鑑權,分別是AOP模式和攔截器模式, 為了避免不必要的效能浪費,這兩種模式預設都處於關閉狀態,因此如若使用註解鑑權,你必須選擇其一進行註冊。
使用方式
1、使用AOP模式
首先在pom.xml裡新增依賴:
<!-- sa-token整合SpringAOP實現註解鑑權 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-aop</artifactId>
<version>1.12.1</version>
</dependency>
然後我們就可以愉快的使用註解鑑權:
- 登入驗證
// 註解式鑑權:當前會話必須登入才能通過
@SaCheckLogin
@RequestMapping("info")
public String info() {
return "查詢使用者資訊";
}
- 角色驗證
// 註解式鑑權:當前會話必須具有指定角色標識才能通過
@SaCheckRole("super-admin")
@RequestMapping("add")
public String add() {
return "使用者增加";
}
- 許可權驗證
// 註解式鑑權:當前會話必須具有指定許可權才能通過
@SaCheckPermission("user-add")
@RequestMapping("add")
public String add() {
return "使用者增加";
}
注:以上兩個註解都可以加在類上,代表為這個類所有方法進行鑑權
設定校驗模式
@SaCheckRole與 @SaCheckPermission 註解可設定校驗模式,例如:
// 註解式鑑權:只要具有其中一個許可權即可通過校驗
@RequestMapping("atJurOr")
@SaCheckPermission(value = {"user-add", "user-all", "user-delete"}, mode = SaMode.OR)
public AjaxJson atJurOr() {
return AjaxJson.getSuccessData("使用者資訊");
}
mode有兩種取值:
- SaMode.AND ,標註一組許可權,會話必須全部具有才可通過校驗
- SaMode.OR , 標註一組許可權,會話只要具有其一即可通過校驗
2、使用攔截器模式
使用AOP方式需要引入新的pom依賴,與此相比,攔截器模式顯的更加輕量級
你只需要將sa-token的註解校驗攔截器註冊到你的專案中即可開啟註解鑑權功能
以SpringBoot2.0為例,新建配置類MySaTokenConfig.java
@Configuration
public class MySaTokenConfig implements WebMvcConfigurer {
// 註冊sa-token的註解攔截器,開啟註解式鑑權功能
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
}
}
保證此類被springboot啟動類掃描到即可
注意事項:
- 使用AOP模式,可以將註解寫在任意層級,使用攔截器模式,只能把註解寫在Controller層上
- 攔截器模式和AOP模式不可同時整合,否則會在Controller層發生一個註解校驗兩次的bug
寫在最後
原始碼開源,作者不易,如果你喜歡這個框架麻煩你隨手點一顆小星星哦!
- 官網文件:http://sa-token.dev33.cn/
- Gitee開源地址: https://gitee.com/sz6/sa-token
- GitHub開源地址: https://github.com/click33/sa-token