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

SpringBoot權(quán)限認(rèn)證-Sa-Token的使用詳解

 更新時間:2024年09月17日 10:39:27   作者:Damon小智  
Sa-Token是一款輕量級Java權(quán)限認(rèn)證框架,它簡化了權(quán)限管理,提高了開發(fā)效率,本文通過實例介紹了Sa-Token的基本概念、與其他框架的比較、基本語法和高級用法,并探討了其核心原理和實際應(yīng)用場景,感興趣的朋友一起看看吧

本文詳細(xì)介紹了Sa-Token在Java項目中的使用方法,包括Sa-Token的基本概念、與其他權(quán)限框架的比較、基本語法和高級用法,并通過實例講解了如何在項目中集成和使用Sa-Token。作為一款輕量級Java權(quán)限認(rè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)限認(rèn)證框架,旨在解決Web系統(tǒng)中常見的登錄認(rèn)證、權(quán)限驗證、Session會話、單點登錄等問題。其核心目標(biāo)是以最簡潔的方式,實現(xiàn)強大的權(quán)限控制功能,幫助開發(fā)者快速完成權(quán)限系統(tǒng)的搭建。

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

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

2. Sa-Token原理解析

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

其主要工作流程如下:

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

流程圖例如下:

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有效期,單位秒,默認(rèn)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. 登錄認(rèn)證

創(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ù)為用戶的唯一標(biāo)識ID。
  • 登錄成功后,可以通過StpUtil.getTokenValue()獲取當(dāng)前會話的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 "當(dāng)前用戶信息,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;
    }
    // 返回一個用戶所擁有的角色標(biāo)識集合 (權(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() {
    // 獲取當(dāng)前會話的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默認(rèn)使用內(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):

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

權(quán)限驗證:

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

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

Sa-Token是一款輕量級的Java權(quán)限認(rèn)證框架,因其簡單易用和功能豐富而備受開發(fā)者青睞。它以簡潔明了的API設(shè)計,使得集成和使用變得非常方便,開發(fā)者可以快速上手,降低了學(xué)習(xí)成本。Sa-Token支持多種權(quán)限控制需求,滿足復(fù)雜業(yè)務(wù)場景,包括登錄認(rèn)證、權(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)限管理。當(dāng)項目需要快速搭建權(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)限認(rèn)證-Sa-Token的使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot權(quán)限認(rèn)證Sa-Token內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java將Object轉(zhuǎn)換為數(shù)組的代碼

    Java將Object轉(zhuǎn)換為數(shù)組的代碼

    這篇文章主要介紹了Java將Object轉(zhuǎn)換為數(shù)組的情況,今天在使用一個別人寫的工具類,這個工具類,主要是判空操作,包括集合、數(shù)組、Map等對象是否為空的操作,需要的朋友可以參考下
    2022-09-09
  • Java FileWriter輸出換行操作

    Java FileWriter輸出換行操作

    這篇文章主要介紹了Java FileWriter輸出換行操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JavaWeb詳細(xì)講述Cookie和Session的概念

    JavaWeb詳細(xì)講述Cookie和Session的概念

    web開發(fā)階段我們主要是瀏覽器和服務(wù)器之間來進行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進行交流一樣,但是對于機器來說,在一次請求之間只是會攜帶著本次請求的數(shù)據(jù)的,但是可能多次請求之間是會有聯(lián)系的,所以提供了會話機制
    2022-06-06
  • 微信小程序與AspNetCore SignalR聊天實例代碼

    微信小程序與AspNetCore SignalR聊天實例代碼

    這篇文章主要介紹了微信小程序與AspNetCore SignalR聊天實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本)

    關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本)

    這篇文章主要介紹了關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解

    RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解

    這篇文章主要為大家介紹了RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • SpringSecurity HttpSecurity 類處理流程分析

    SpringSecurity HttpSecurity 類處理流程分析

    SpringSecurity在SSM項目中使用基于配置文件,通過XML標(biāo)簽定義認(rèn)證信息,HttpSecurity在SpringBoot中通過代碼配置實現(xiàn)與XML相同功能,詳細(xì)介紹了HttpSecurity的類結(jié)構(gòu)、處理過程及其與SecurityBuilder的關(guān)系,感興趣的朋友一起看看吧
    2024-09-09
  • SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次

    SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次

    本文主要介紹了SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 簡單的java讀取文件示例分享

    簡單的java讀取文件示例分享

    這篇文章主要介紹了java讀取txt文件內(nèi)容,示例很簡單,代碼里有注釋,大家直接看代碼吧
    2014-01-01
  • maven中央倉庫修改驗證方式導(dǎo)致用戶名密碼失效的解決方式

    maven中央倉庫修改驗證方式導(dǎo)致用戶名密碼失效的解決方式

    這篇文章主要介紹了maven中央倉庫修改驗證方式導(dǎo)致用戶名密碼失效的解決方式,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家解決問題有一定的幫助
    2024-11-11

最新評論