sa-token 之注解式鑒權


注解式鑒權

前言

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

寫在最后

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

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM