最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sa-Token 基礎(chǔ)及 Spring Boot 集成實戰(zhàn)指南

 更新時間:2025年07月26日 11:43:48   作者:張道寧  
Sa-Token是輕量級Java權(quán)限認證框架,支持登錄、權(quán)限、單點登錄等場景,集成SpringBoot簡便,提供豐富注解和模塊化設(shè)計,相比Shiro和SpringSecurity更易用且適合中小型項目,注重安全與擴展性,本文給大家介紹Sa-Token基礎(chǔ)及Spring Boot集成實戰(zhàn)指南,感興趣的一起看看吧

一、Sa-Token 簡介

Sa-Token 是一個輕量級 Java 權(quán)限認證框架,主要解決登錄認證、權(quán)限認證、單點登錄、OAuth2.0、分布式 Session 會話等一系列與權(quán)限相關(guān)的問題。相比于 Shiro 和 Spring Security,Sa-Token 具有以下特點:

  1. 簡單易用:API 設(shè)計直觀,學(xué)習(xí)成本低
  2. 功能全面:覆蓋大部分認證授權(quán)場景
  3. 輕量高效:不依賴復(fù)雜設(shè)計,性能優(yōu)異
  4. 模塊化設(shè)計:可按需引入功能模塊
  5. 良好擴展性:支持自定義各種組件

二、核心概念

1. 登錄認證流程

用戶登錄 -> 生成Token -> 存儲Token -> 返回給客戶端
客戶端攜帶Token -> 服務(wù)器驗證Token -> 訪問受保護資源

2. 核心組件

  • StpUtil:核心工具類,提供登錄、注銷、權(quán)限校驗等操作
  • SaTokenConfig:配置類,可自定義各種參數(shù)
  • SaInterceptor:攔截器,實現(xiàn)路由攔截鑒權(quán)
  • SaTokenDao:Token 持久層接口,默認內(nèi)存實現(xiàn),可擴展為 Redis

3. 主要功能

  • 登錄認證
  • 權(quán)限認證(角色/權(quán)限)
  • Session 管理
  • 踢人下線
  • 多賬號體系
  • 單點登錄
  • 模擬他人賬號
  • 臨時身份切換

三、Spring Boot 集成實戰(zhàn)

1. 添加依賴

<!-- Sa-Token 核心包 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>
<!-- 如果使用Redis持久化 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-dao-redis</artifactId>
    <version>最新版本</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

2. 基礎(chǔ)配置

# application.yml
sa-token:
  # token名稱 (同時也是cookie名稱)
  token-name: satoken
  # token有效期,單位s 默認30天
  timeout: 2592000
  # token臨時有效期 (指定時間內(nèi)無操作就視為token過期) 單位: 秒
  activity-timeout: -1
  # 是否允許同一賬號并發(fā)登錄 (為true時允許一起登錄, 為false時新登錄擠掉舊登錄)
  is-concurrent: true
  # 在多人登錄同一賬號時,是否共用一個token (為true時所有登錄共用一個token, 為false時每次登錄新建一個token)
  is-share: true
  # token風(fēng)格
  token-style: uuid
  # 是否輸出操作日志
  is-log: true

3. 登錄認證實現(xiàn)

@RestController
@RequestMapping("/user/")
public class UserController {
    @PostMapping("doLogin")
    public SaResult doLogin(String username, String password) {
        // 模擬數(shù)據(jù)庫校驗
        if("admin".equals(username) && "123456".equals(password)) {
            // 登錄成功,生成Token
            StpUtil.login(10001);
            return SaResult.ok("登錄成功").setData(StpUtil.getTokenInfo());
        }
        return SaResult.error("登錄失敗");
    }
    // 查詢登錄狀態(tài)
    @GetMapping("isLogin")
    public SaResult isLogin() {
        return SaResult.ok("是否登錄:" + StpUtil.isLogin());
    }
    // 退出登錄
    @GetMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }
}

4. 權(quán)限認證實現(xiàn)

@RestController
@RequestMapping("/admin/")
public class AdminController {
    // 權(quán)限校驗:必須具有admin權(quán)限才能進入
    @SaCheckPermission("admin")
    @GetMapping("menu")
    public SaResult menu() {
        return SaResult.data("管理員菜單");
    }
    // 角色校驗:必須具有super-admin角色才能進入
    @SaCheckRole("super-admin")
    @GetMapping("settings")
    public SaResult settings() {
        return SaResult.data("系統(tǒng)設(shè)置");
    }
    // 二級認證:必須輸入密碼進行二次驗證后才能進入
    @SaCheckSafe()
    @GetMapping("criticalOperation")
    public SaResult criticalOperation() {
        return SaResult.data("關(guān)鍵操作");
    }
}

5. 全局攔截器配置

@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    // 注冊Sa-Token的注解攔截器,打開注解式鑒權(quán)功能
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊注解攔截器
        registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
    }
}

四、進階功能

1. Redis 集成(分布式會話)

# application.yml
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 
    database: 0
sa-token:
  # 配置Token持久化到Redis
  is-share: true
  is-read-body: false
  is-read-head: true
  is-v: false
  token-prefix: "satoken:"
  jwt-secret-key: null
  id-token-timeout: 86400
  dao: "redis"

2. 自定義會話管理

@Component
public class CustomSaTokenDao extends SaTokenDaoDefaultImpl {
    // 重寫數(shù)據(jù)訪問層方法,例如使用MongoDB存儲
    @Override
    public String get(String key) {
        // 自定義實現(xiàn)
        return super.get(key);
    }
    @Override
    public void set(String key, String value, long timeout) {
        // 自定義實現(xiàn)
        super.set(key, value, timeout);
    }
}

3. 注解鑒權(quán)

Sa-Token 提供豐富的注解用于權(quán)限控制:

  • @SaCheckLogin: 登錄校驗
  • @SaCheckRole("admin"): 角色校驗
  • @SaCheckPermission("user:add"): 權(quán)限校驗
  • @SaCheckSafe: 二級認證校驗
  • @SaCheckBasic: HttpBasic校驗

4. 路由攔截鑒權(quán)

@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SaInterceptor(handler -> {
            // 登錄校驗 -- 攔截所有路由
            SaRouter.match("/**").check(r -> StpUtil.checkLogin());
            // 角色校驗 -- 攔截以 admin 開頭的路由
            SaRouter.match("/admin/**").check(r -> StpUtil.checkRole("admin"));
            // 權(quán)限校驗 -- 不同模塊校驗不同權(quán)限
            SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
            SaRouter.match("/order/**", r -> StpUtil.checkPermission("order"));
        })).addPathPatterns("/**");
    }
}

五、最佳實踐

  1. Token 安全

    • 使用 HTTPS
    • 設(shè)置合理的 token 有效期
    • 避免 token 在 URL 中傳輸
    • 實現(xiàn) token 續(xù)期機制
  2. 權(quán)限設(shè)計

    • 遵循最小權(quán)限原則
    • 使用 RBAC (基于角色的訪問控制) 模型
    • 實現(xiàn)權(quán)限緩存機制
  3. 性能優(yōu)化

    • 對于分布式系統(tǒng)使用 Redis 存儲 token
    • 合理設(shè)置 token 的過期時間
    • 實現(xiàn)本地緩存減少持久層訪問
  4. 監(jiān)控與日志

    • 記錄關(guān)鍵認證操作
    • 監(jiān)控異常登錄行為
    • 實現(xiàn)登錄設(shè)備管理

六、常見問題解決方案

  1. Token 失效問題

    • 檢查 token 過期時間設(shè)置
    • 驗證 token 持久化是否正常工作
    • 檢查是否有并發(fā)登錄沖突
  2. 跨域問題

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("*")
                    .allowedHeaders("*")
                    .exposedHeaders("satoken"); // 重點暴露satoken頭
        }
    }
  3. 自定義響應(yīng)格式

    @RestControllerAdvice
    public class GlobalExceptionHandler {
        // 攔截所有未處理的SaToken異常
        @ExceptionHandler(SaTokenException.class)
        public SaResult handlerSaTokenException(SaTokenException e) {
            return SaResult.error(e.getMessage());
        }
    }
  4. 多賬號體系

    // 對于不同的賬號體系,可以使用不同的StpUtil
    StpUtil.stpLogic("user").login(10001);  // 用戶體系登錄
    StpUtil.stpLogic("admin").login(1);     // 管理員體系登錄

七、總結(jié)

Sa-Token 作為一個輕量級的權(quán)限認證框架,通過簡單的 API 設(shè)計和豐富的功能,能夠滿足大多數(shù)應(yīng)用的認證授權(quán)需求。與 Spring Boot 的集成非常簡便,通過少量配置即可實現(xiàn)強大的權(quán)限控制功能。

相比傳統(tǒng)的 Shiro 和 Spring Security,Sa-Token 的學(xué)習(xí)曲線更為平緩,且針對常見場景提供了開箱即用的解決方案。特別是對于中小型項目,Sa-Token 能夠顯著降低權(quán)限系統(tǒng)的開發(fā)成本。

在實際項目中,建議根據(jù)業(yè)務(wù)需求選擇合適的持久化方案(內(nèi)存或 Redis),合理設(shè)計權(quán)限模型,并遵循安全最佳實踐,以構(gòu)建安全可靠的認證授權(quán)系統(tǒng)。

到此這篇關(guān)于Sa-Token 基礎(chǔ)及 Spring Boot 集成實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Spring Boot 集成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析java 歸并排序算法

    淺析java 歸并排序算法

    這篇文章主要簡單介紹了java 歸并排序算法的工作原理及代碼,需要的朋友可以參考下
    2015-02-02
  • SpringBoot中的@DependsOn注解詳解

    SpringBoot中的@DependsOn注解詳解

    這篇文章主要介紹了SpringBoot中的@DependsOn注解詳解,
    2023-08-08
  • IDEA如何使用spring-Initializr快速搭建SpringBoot

    IDEA如何使用spring-Initializr快速搭建SpringBoot

    這篇文章主要介紹了IDEA如何使用spring-Initializr快速搭建SpringBoot問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中ReentrantLock和ReentrantReadWriteLock的原理

    Java中ReentrantLock和ReentrantReadWriteLock的原理

    這篇文章主要介紹了Java中ReentrantLock和ReentrantReadWriteLock的原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • java實現(xiàn)XML與JSON轉(zhuǎn)換的便捷實用方法

    java實現(xiàn)XML與JSON轉(zhuǎn)換的便捷實用方法

    這篇文章主要為大家介紹了java實現(xiàn)XML與JSON轉(zhuǎn)換的便捷實用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 解析Java的JVM以及類與對象的概念

    解析Java的JVM以及類與對象的概念

    這篇文章主要介紹了解析Java的JVM以及類與對象的概念,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • SpringCloud Sleuth 分布式鏈路追蹤實踐指南

    SpringCloud Sleuth 分布式鏈路追蹤實踐指南

    SpringCloud Sleuth是一個用于分布式追蹤的組件,通過為每個請求生成唯一的TraceID和SpanID,記錄請求在多個微服務(wù)中的流轉(zhuǎn)情況,本文重點給大家介紹SpringCloud Sleuth 分布式鏈路追蹤的實例講解,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • springboot2.3 整合mybatis-plus 高級功能及用法詳解

    springboot2.3 整合mybatis-plus 高級功能及用法詳解

    這篇文章主要介紹了springboot2.3 整合mybatis-plus 高級功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java this關(guān)鍵字的使用詳解

    Java this關(guān)鍵字的使用詳解

    this 關(guān)鍵字是 Java 常用的關(guān)鍵字,可用于任何實例方法內(nèi)指向當(dāng)前對象,也可指向?qū)ζ湔{(diào)用當(dāng)前方法的對象,或者在需要當(dāng)前類型對象引用時使用
    2021-11-11
  • ssm實現(xiàn)分頁查詢的實例

    ssm實現(xiàn)分頁查詢的實例

    下面小編就為大家?guī)硪黄猻sm實現(xiàn)分頁查詢的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論

乌拉特中旗| 婺源县| 嘉鱼县| 平顶山市| 防城港市| 丹巴县| 新安县| 渑池县| 浦城县| 蕉岭县| 丰顺县| 页游| 孝感市| 金堂县| 黑山县| 洪洞县| 保定市| 罗平县| 商洛市| 达日县| 凤冈县| 嵩明县| 永春县| 巴林右旗| 班戈县| 饶平县| 托克逊县| 安义县| 江口县| 莲花县| 郯城县| 克山县| 通化县| 西林县| 循化| 龙海市| 辽阳县| 抚松县| 乐山市| 霍州市| 南岸区|