注解式鑒權
前言
有同學表示:盡管使用代碼鑒權非常方便,但是我仍希望可以把鑒權邏輯和業務邏輯分離開來,我可以使用注解鑒權嗎?
當然可以!身為自詡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