欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot權(quán)限認證Sa-Token的使用總結(jié)

 更新時間:2025年02月28日 09:10:39   作者:Damon小智  
Sa-Token是一款輕量級Java權(quán)限認證框架,適用于快速搭建權(quán)限系統(tǒng),它提供了豐富的功能,包括登錄認證、權(quán)限驗證、角色驗證、Session會話管理等,并且具有良好的社區(qū)支持和文檔資源,下面重點給大家介紹SpringBoot權(quán)限認證Sa-Token的使用,感興趣的朋友一起看看吧

本文詳細介紹了Sa-Token在Java項目中的使用方法,包括Sa-Token的基本概念、與其他權(quán)限框架的比較、基本語法和高級用法,并通過實例講解了如何在項目中集成和使用Sa-Token。作為一款輕量級Java權(quán)限認證框架,Sa-Token在簡化權(quán)限管理、提高開發(fā)效率方面發(fā)揮了重要作用。本文還將深入探討Sa-Token的核心原理,通過內(nèi)部代碼展示其工作機制。最后,總結(jié)了Sa-Token的優(yōu)缺點及其在實際開發(fā)中的應(yīng)用場景,為開發(fā)者提供全面的指導(dǎo)。

一、Sa-Token介紹

1. Sa-Token簡介

Sa-Token是一款輕量級Java權(quán)限認證框架,旨在解決Web系統(tǒng)中常見的登錄認證、權(quán)限驗證、Session會話、單點登錄等問題。其核心目標是以最簡潔的方式,實現(xiàn)強大的權(quán)限控制功能,幫助開發(fā)者快速完成權(quán)限系統(tǒng)的搭建。

Sa-Token具有如下優(yōu)勢:

優(yōu)勢描述
簡單易用API設(shè)計簡潔明了,易于集成和使用,上手快,學(xué)習(xí)成本低。
功能豐富支持多種權(quán)限控制需求,滿足復(fù)雜業(yè)務(wù)場景。支持登錄認證、權(quán)限驗證、角色驗證、Session會話、多賬號體系等功能。
高性能輕量級設(shè)計,對系統(tǒng)性能影響小。
高度可擴展提供豐富的擴展接口,與Spring、Spring Boot等常用框架高度兼容,支持自定義持久化、注解方式驗證、單點登錄等高級特性。
社區(qū)活躍有良好的社區(qū)支持和文檔資源。

2. Sa-Token原理解析

Sa-Token的核心原理是通過Token機制實現(xiàn)用戶的身份認證和權(quán)限校驗。

其主要工作流程如下:

登錄認證:用戶登錄成功后,服務(wù)器生成一個全局唯一的Token,并將其返回給客戶端。
Token存儲:Token與用戶身份信息的映射關(guān)系保存在服務(wù)器的會話中(如Redis、內(nèi)存等)。
權(quán)限驗證:客戶端請求時攜帶Token,服務(wù)器根據(jù)Token獲取用戶信息,驗證其權(quán)限是否滿足要求。
會話管理:支持Session會話管理,可以獲取和操作當前會話的屬性。

流程圖例如下:

3. Sa-Token與其他權(quán)限框架比較

Sa-Token與其他常見權(quán)限框架在學(xué)習(xí)成本、集成難度上有顯著優(yōu)勢:

特性Sa-TokenShiroSpring Security
學(xué)習(xí)成本
功能豐富度
集成難度
性能表現(xiàn)
社區(qū)支持活躍一般活躍
擴展性

二、Sa-Token的基本語法

在實際項目中,Sa-Token通過簡單的配置和API調(diào)用,即可實現(xiàn)完整的權(quán)限管理功能。以下將通過一個完整的Spring Boot示例,演示如何集成和使用Sa-Token。

1. 創(chuàng)建Spring Boot項目

首先,創(chuàng)建一個新的Spring Boot項目,可以使用IDEA的項目向?qū)Щ騍pring Initializr。

引入必要的依賴:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Sa-Token核心依賴 -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-spring-boot-starter</artifactId>
        <version>1.34.0</version>
    </dependency>
</dependencies>

2. 配置Sa-Token

application.yml

# Sa-Token配置,可根據(jù)需要進行調(diào)整
sa-token:
  # token有效期,單位秒,默認30天
  timeout: 2592000
  # 是否打開二級登錄校驗
  open-safe: false

3. 配置攔截器

創(chuàng)建配置類,添加Sa-Token的攔截器,以攔截請求并進行權(quán)限驗證。

SaTokenConfigure.java

import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊Sa-Token的注解攔截器,攔截所有路徑
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
    }
}

4. 登錄認證

創(chuàng)建登錄接口,實現(xiàn)用戶登錄功能。

LoginController.java

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.*;
@RestController
public class LoginController {
    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 1. 校驗用戶名和密碼(這里模擬一個簡單的校驗)
        if("admin".equals(username) && "123456".equals(password)) {
            // 2. 登錄,保存用戶ID為10001
            StpUtil.login(10001);
            return "登錄成功,Token:" + StpUtil.getTokenValue();
        }
        return "用戶名或密碼錯誤";
    }
}

說明:

  • 調(diào)用StpUtil.login(10001)方法,實現(xiàn)登錄操作,參數(shù)為用戶的唯一標識ID。
  • 登錄成功后,可以通過StpUtil.getTokenValue()獲取當前會話的Token。

5. 權(quán)限驗證

創(chuàng)建需要權(quán)限驗證的接口,例如獲取用戶信息的接口。

UserController.java

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
    // 查詢用戶信息,需登錄
    @GetMapping("/info")
    public String getUserInfo() {
        // 校驗是否登錄
        StpUtil.checkLogin();
        // 獲取用戶ID
        int userId = StpUtil.getLoginIdAsInt();
        return "當前用戶信息,ID:" + userId;
    }
    // 修改用戶信息,需有權(quán)限"user:update"
    @SaCheckPermission("user:update")
    @PostMapping("/update")
    public String updateUser() {
        return "用戶信息更新成功";
    }
}

說明:

  • 使用StpUtil.checkLogin()方法手動校驗登錄狀態(tài)。
  • 使用@SaCheckPermission("user:update")注解,聲明該接口需要權(quán)限user:update。

6. 角色驗證

如果需要基于角色進行權(quán)限控制,可以使用@SaCheckRole注解。

import cn.dev33.satoken.annotation.SaCheckRole;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin")
public class AdminController {
    // 僅管理員角色可訪問
    @SaCheckRole("admin")
    @GetMapping("/dashboard")
    public String adminDashboard() {
        return "歡迎進入管理員控制臺";
    }
}

7. 自定義權(quán)限驗證邏輯

需要自定義獲取用戶權(quán)限和角色的邏輯,可以實現(xiàn)StpInterface接口。

StpInterfaceImpl.java

import cn.dev33.satoken.stp.StpInterface;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
public class StpInterfaceImpl implements StpInterface {
    // 返回一個用戶所擁有的權(quán)限碼集合
    @Override
    public List<String> getPermissionList(Object loginId, String loginKey) {
        // 模擬從數(shù)據(jù)庫獲取權(quán)限
        List<String> permissionList = new ArrayList<>();
        if("10001".equals(loginId.toString())) {
            permissionList.add("user:update");
            permissionList.add("user:delete");
        }
        return permissionList;
    }
    // 返回一個用戶所擁有的角色標識集合 (權(quán)限與角色可分開校驗)
    @Override
    public List<String> getRoleList(Object loginId, String loginKey) {
        // 模擬從數(shù)據(jù)庫獲取角色
        List<String> roleList = new ArrayList<>();
        if("10001".equals(loginId.toString())) {
            roleList.add("admin");
        }
        return roleList;
    }
}

說明:

  • 實現(xiàn)getPermissionList方法,返回指定用戶的權(quán)限列表。
  • 實現(xiàn)getRoleList方法,返回指定用戶的角色列表。

8. 會話管理

Sa-Token提供了會話管理功能,可以在Session中存儲和獲取數(shù)據(jù)。

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
public void sessionDemo() {
    // 獲取當前會話的Session
    SaSession session = StpUtil.getSession();
    // 存儲數(shù)據(jù)
    session.set("name", "張三");
    session.set("email", "zhangsan@example.com");
    // 獲取數(shù)據(jù)
    String name = session.getString("name");
    String email = session.getString("email");
    // 輸出
    System.out.println("姓名:" + name);
    System.out.println("郵箱:" + email);
}

9. 踢人下線

可以通過用戶ID強制用戶下線。

// 將用戶ID為10001的用戶踢下線
StpUtil.logoutByLoginId(10001);
// 檢查用戶是否已被踢下線
boolean isLogout = StpUtil.isLogin();
System.out.println("用戶是否登錄:" + isLogout);

10. 注銷登錄

用戶主動注銷登錄,可以調(diào)用StpUtil.logout()方法。

// 注銷登錄
StpUtil.logout();
// 檢查登錄狀態(tài)
boolean isLogin = StpUtil.isLogin();
System.out.println("用戶是否登錄:" + isLogin);

三、Sa-Token的高級用法

1. 自定義持久化

Sa-Token默認使用內(nèi)存來存儲Token信息,在分布式環(huán)境中,可以使用Redis作為持久化介質(zhì)。

引入Redis依賴:

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-dao-redis</artifactId>
    <version>1.34.0</version>
</dependency>

配置Redis持久化:

import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoRedis;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SaTokenDaoConfig {
    @Bean
    public SaTokenDao saTokenDao() {
        // 返回Redis實現(xiàn)
        return new SaTokenDaoRedis();
    }
}

配置Redis連接信息:

application.yml

# 配置Redis連接信息
spring:
  redis:
    host: localhost
    port: 6379
    password:

2. 單點登錄(SSO)

Sa-Token提供了SSO模塊,可以快速實現(xiàn)單點登錄功能。

引入SSO依賴:

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-sso</artifactId>
    <version>1.34.0</version>
</dependency>

配置SSO相關(guān)參數(shù):

application.yml

# SSO單點登錄配置
sa-token:
  sso:
    mode: client
    server-url: http://sso-server.com
    client-url: http://client1.com
**實現(xiàn)SSO登錄邏輯:**
在客戶端應(yīng)用中,配置SSO的攔截器,自動處理單點登錄。
**SaTokenConfigure.java**
```java
import cn.dev33.satoken.sso.SaSsoHandle;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊SSO攔截器
        registry.addInterceptor(new SaSsoHandle()).addPathPatterns("/**");
    }
}

3. OAuth2.0支持

Sa-Token也支持OAuth2.0協(xié)議,可以實現(xiàn)與第三方平臺的對接。

引入OAuth2.0依賴:

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-oauth2</artifactId>
    <version>1.34.0</version>
</dependency>

配置OAuth2.0參數(shù)和實現(xiàn)授權(quán)流程(此處略,具體可參考官方文檔)。

4. 多賬號體系

如果系統(tǒng)中存在多種身份的用戶,例如普通用戶、管理員、商家等,可以使用多賬號體系進行區(qū)分。

登錄指定賬號體系:

// 管理員登錄,loginKey為"admin"
StpUtil.login(10001, "admin");

檢查登錄狀態(tài):

// 檢查當前賬號體系下是否登錄
boolean isLogin = StpUtil.isLogin("admin");

權(quán)限驗證:

// 在指定賬號體系下進行權(quán)限驗證
StpUtil.checkPermission("user:update", "admin");

四、Sa-Token使用總結(jié)

Sa-Token是一款輕量級的Java權(quán)限認證框架,因其簡單易用和功能豐富而備受開發(fā)者青睞。它以簡潔明了的API設(shè)計,使得集成和使用變得非常方便,開發(fā)者可以快速上手,降低了學(xué)習(xí)成本。Sa-Token支持多種權(quán)限控制需求,滿足復(fù)雜業(yè)務(wù)場景,包括登錄認證、權(quán)限驗證、角色驗證、Session會話、多賬號體系等功能,全面覆蓋了權(quán)限管理的各個方面。其輕量級的設(shè)計對系統(tǒng)性能影響小,適用于高并發(fā)的應(yīng)用環(huán)境。此外,Sa-Token提供了豐富的擴展接口,與Spring、Spring Boot等常用框架高度兼容,支持自定義持久化、注解方式驗證、單點登錄等高級特性,方便開發(fā)者根據(jù)項目需求進行定制開發(fā)?;钴S的社區(qū)支持和豐富的文檔資源也使得開發(fā)者能夠輕松獲取幫助和指導(dǎo)。

由于這些優(yōu)勢,Sa-Token非常適合中小型項目的快速開發(fā)和微服務(wù)架構(gòu)下的權(quán)限管理。當項目需要快速搭建權(quán)限系統(tǒng)時,選擇Sa-Token是一個理想的方案。然而,在使用過程中需要注意Token的安全性,防止泄露帶來風(fēng)險;對于高并發(fā)場景,建議使用Redis等持久化介質(zhì)來提高系統(tǒng)性能和擴展性;同時,關(guān)注Sa-Token的版本更新,及時獲取新功能和安全補丁,以確保系統(tǒng)的安全性和穩(wěn)定性。

到此這篇關(guān)于SpringBoot權(quán)限認證-Sa-Token的使用與詳解的文章就介紹到這了,更多相關(guān)SpringBoot Sa-Token使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解SpringBoot的配置環(huán)境屬性

    深入理解SpringBoot的配置環(huán)境屬性

    SpringBoot的配置環(huán)境屬性是一種強大的工具,可以幫助我們配置和管理我們的應(yīng)用程序,這篇文章主要介紹了SpringBoot的配置環(huán)境屬性,需要的朋友可以參考下
    2023-07-07
  • Spring中WebDataBinder使用詳解

    Spring中WebDataBinder使用詳解

    這篇文章主要為大家詳細介紹了Spring中WebDataBinder的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Mybatis的Mapper中的方法為什么不能重載

    Mybatis的Mapper中的方法為什么不能重載

    這篇文章主要介紹了Mybatis的Mapper中的方法為什么不能重載,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 基于Listener監(jiān)聽器生命周期(詳解)

    基于Listener監(jiān)聽器生命周期(詳解)

    下面小編就為大家?guī)硪黄贚istener監(jiān)聽器生命周期(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • jwt生成token和token解析基礎(chǔ)詳解

    jwt生成token和token解析基礎(chǔ)詳解

    這篇文章主要為大家介紹了jwt生成token和token解析基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • java實現(xiàn)簡易聊天功能

    java實現(xiàn)簡易聊天功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡易聊天功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 基于Spring實現(xiàn)零重啟自由編排任務(wù)的定時管理器

    基于Spring實現(xiàn)零重啟自由編排任務(wù)的定時管理器

    我們發(fā)現(xiàn),我們使用Spring自帶的定時任務(wù)如果要有修改,那么就要修改代碼,然后重啟項目,所以本文就帶大家實現(xiàn)一個零重啟自由編排任務(wù)的定時管理器吧
    2023-07-07
  • Eclipse手動導(dǎo)入DTD文件實現(xiàn)方法解析

    Eclipse手動導(dǎo)入DTD文件實現(xiàn)方法解析

    這篇文章主要介紹了Eclipse手動導(dǎo)入DTD文件實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 詳解Spring如何解決循環(huán)引用的問題

    詳解Spring如何解決循環(huán)引用的問題

    在Spring框架中,當兩個或多個Bean之間存在相互依賴關(guān)系時,可能會導(dǎo)致循環(huán)引用的問題,循環(huán)引用指的是兩個或多個Bean之間互相依賴,形成一個循環(huán)鏈,本文將和大家一起探討Spring如何解決循環(huán)引用的問題,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • Spring整合Weblogic jms實例詳解

    Spring整合Weblogic jms實例詳解

    這篇文章主要介紹了Spring整合Weblogic jms實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論