1. 程式人生 > 其它 >sa-token 之註解式鑑權

sa-token 之註解式鑑權

技術標籤:許可權框架java

註解式鑑權

前言

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

寫在最後

原始碼開源,作者不易,如果你喜歡這個框架麻煩你隨手點一顆小星星哦!

在這裡插入圖片描述