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

Spring?Boot?集成并開發(fā)?Sa-token示例詳解

 更新時(shí)間:2023年06月07日 10:22:03   作者:吳名氏.  
Sa-token是一款高可用的權(quán)限認(rèn)證框架,他帶我們用最簡(jiǎn)化的配置完成用?spring?security?需要進(jìn)行大量配置的才能完成的工作,這篇文章主要介紹了Spring?Boot?集成并開發(fā)?Sa-token,需要的朋友可以參考下

1 Spring Boot集成Sa-token

1.1 前言

Sa-token是一款高可用的權(quán)限認(rèn)證框架,他帶我們用最簡(jiǎn)化的配置完成用 spring security 需要進(jìn)行大量配置的才能完成的工作。

Sa-Token 是一個(gè)輕量級(jí) Java 權(quán)限認(rèn)證框架,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2.0、分布式Session會(huì)話、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題。

官網(wǎng):https://sa-token.dev33.cn/
源碼:https://gitee.com/dromara/sa-token

1.2 集成Sa-token

在我們的基礎(chǔ)開發(fā)版本中,我們只需要引入最基礎(chǔ)依賴,現(xiàn)在的最新官方版本為:1.30.0 建議使用最新版本,如果在你的maven 倉庫中沒有該版本,需要替換maven 的鏡像源,請(qǐng)參考

<!-- Sa-Token 權(quán)限認(rèn)證, 在線文檔:http://sa-token.dev33.cn/ -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.30.0</version>
</dependency>

配置依賴后需要配置spring boot本地自定義配置

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

按該配置,配置完成后即可完成基礎(chǔ)的引入,這里主要配置token 的過期和作用范圍。

token:服務(wù)端生成的一串加密字符串、以作客戶端進(jìn)行請(qǐng)求的一個(gè)“令牌”。. 當(dāng)用戶第一次使用賬號(hào)密碼成功進(jìn)行登錄后,服務(wù)器便生成一個(gè)Token及Token失效時(shí)間并將此返回給客戶端,若成功登陸,以后客戶端只需在有效時(shí)間內(nèi)帶上這個(gè)Token前來請(qǐng)求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。

1.3 基礎(chǔ)使用

校驗(yàn)是否成功引入可在啟動(dòng)類下添加該語句

@SpringBootApplication
@EnableScheduling
public class CretApplication {
    public static void main(String[] args) {
        SpringApplication.run(CretApplication.class, args);
				System.out.println("啟動(dòng)成功:Sa-Token配置如下:" + SaManager.getConfig());
    }
}

當(dāng)控制臺(tái)輸出我們的配置內(nèi)容時(shí),證明sa-token 的依賴已經(jīng)引入,觀察輸出就會(huì)發(fā)現(xiàn)sa-token 已經(jīng)為我們初始化了很多的配置,接下的使用就會(huì)非常的簡(jiǎn)單!

啟動(dòng)成功:Sa-Token配置如下:SaTokenConfig [tokenName=satoken, timeout=2592000, activityTimeout=-1, isConcurrent=true, isShare=true, maxLoginCount=12, isReadBody=true, isReadHead=true, isReadCookie=true, tokenStyle=uuid, dataRefreshPeriod=30, tokenSessionCheckLogin=true, autoRenew=true, tokenPrefix=null, isPrint=true, isLog=false, jwtSecretKey=null, idTokenTimeout=86400, basic=, currDomain=null, checkIdToken=false, cookie=SaCookieConfig [domain=null, path=null, secure=false, httpOnly=false, sameSite=null]]

作為一個(gè)權(quán)限校驗(yàn)開發(fā)框架,他的第一個(gè)動(dòng)作便是針對(duì)我們的登錄操作,在登錄的時(shí)候便需要開始使用sa-token里面很強(qiáng)大的一個(gè)類‘ StpUtil.class’

// 會(huì)話登錄:參數(shù)填寫要登錄的賬號(hào)id,建議的數(shù)據(jù)類型:long | int | String, 
不可以傳入復(fù)雜類型,如:User、Admin 等等
StpUtil.login(Object id);   
// 當(dāng)前會(huì)話注銷登錄
StpUtil.logout();
// 獲取當(dāng)前會(huì)話是否已經(jīng)登錄,返回true=已登錄,false=未登錄
StpUtil.isLogin();
// 檢驗(yàn)當(dāng)前會(huì)話是否已經(jīng)登錄, 如果未登錄,則拋出異常:`NotLoginException`
StpUtil.checkLogin();

只需要通過簡(jiǎn)單的一句登錄,sa-token便已經(jīng)為我們生成好權(quán)限校驗(yàn)的系列組件。如果你覺得這種代碼方式的開發(fā)太繁瑣,不是那么的清晰知道當(dāng)前的權(quán)限,進(jìn)行簡(jiǎn)單的校驗(yàn),就可以開啟注解方式的校驗(yàn)。注解式校驗(yàn)的配置如下:

@Configuration
public class SaTokenConfig implements WebMvcConfigurer {
    // 注冊(cè)Sa-Token的注解攔截器,打開注解式鑒權(quán)功能
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊(cè)注解攔截器,并排除不需要注解鑒權(quán)的接口地址 (與登錄攔截器無關(guān))
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
    }
}

在開啟攔截器后,我們即可實(shí)現(xiàn)注解式開發(fā),像之前使用spring 注解一般。

// 檢驗(yàn)當(dāng)前會(huì)話是否已經(jīng)登錄
StpUtil.checkLogin();
//檢驗(yàn)當(dāng)前會(huì)話是否已經(jīng)登錄
@SaCheckLogin

這里的注解可直接放在一個(gè)接口上,這樣當(dāng)一個(gè)請(qǐng)求進(jìn)來的時(shí)候sa-token 的攔截器會(huì)先從請(qǐng)求中獲取自己注入 的標(biāo)識(shí) sa-token ,這個(gè)sa-token 里面包含了系列參數(shù)來保證登錄的安全正確性。

2 Spring Boot開發(fā)Sa-token

上一部分我們介紹了如何通過sa-token 實(shí)現(xiàn)最基礎(chǔ)的登錄認(rèn)證,在開發(fā)過程中我們會(huì)對(duì)sa-token 的一系列功能進(jìn)行使用,慕歌將就自己的項(xiàng)目向大家展示sa-token 的一些功能,如登錄校驗(yàn)、登錄檢測(cè)、封禁用戶,token 校驗(yàn),多租戶模式等功能

2.1 導(dǎo)入maven依賴

        <!-- Sa-Token 整合 Redis (使用 jdk 默認(rèn)序列化方式) -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-dao-redis</artifactId>
            <version>1.30.0</version>
        </dependency>
        <!-- redis 緩存操作 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--連接池依賴-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.2 權(quán)限校驗(yàn)

在進(jìn)行登錄驗(yàn)證的同時(shí),進(jìn)行權(quán)限校驗(yàn)也是重要的一環(huán),sa-token通過攔截器,為我們的權(quán)限校驗(yàn)進(jìn)行了拓展,讓我們可以在全局工程中隨處進(jìn)行權(quán)限控制。并且依賴于上一節(jié)介紹的注解式開發(fā),使得整個(gè)校驗(yàn)過程更加的簡(jiǎn)潔,明了。

/**
 * 注入權(quán)限組
 */
@Component
public class StpInterfaceImpl implements StpInterface {
    //權(quán)限
    @Autowired
    AdminPowerMapper adminPowerMapper;
    //角色
    @Autowired
    AdminRolesMapper adminRolesMapperl;
    /**
     * 用戶權(quán)限
     * @param loginId 登錄id
     * @param s
     * @return
     */
    @Override
    public List<String> getPermissionList(Object loginId, String s) {
        //獲得登錄的用戶id 對(duì)應(yīng)權(quán)限
        List<String> userPermissions = adminPowerMapper.getUserPermissions(loginId);
        System.out.println("permiassion - list : "+userPermissions);
        return userPermissions;
    }
    /**
     * 用戶角色
     * @param loginId 登錄id
     * @param s
     * @return
     */
    @Override
    public List<String> getRoleList(Object loginId, String s) {
        //獲得登錄的用戶id 對(duì)應(yīng)角色
        List<String> userRoles = adminRolesMapperl.getUserRole(loginId);
        System.out.println("role - list : "+userRoles);
        return userRoles;
    }
}

在我的開發(fā)中,引入了兩層控制,角色表,權(quán)限表,進(jìn)行細(xì)顆粒的權(quán)限控制,更好保證數(shù)據(jù)見的隔離。附上我的角色表于權(quán)限表的設(shè)計(jì)源碼:

create table cf_admin_power
(
    id          int unsigned auto_increment comment '權(quán)限id'
        primary key,
    code        varchar(32)                not null comment '權(quán)限碼',
    name        char(32)                   not null comment '權(quán)限名',
    level       char(32)                   not null comment '等級(jí)',
    icon        varchar(255)               null comment '圖標(biāo)',
    is_show     tinyint unsigned default 1 not null comment '是否顯示(0:否,1:是)',
    status      tinyint unsigned default 1 not null comment '狀態(tài)(1:可用,2:停用,3:已刪除)',
    create_time datetime                   not null comment '創(chuàng)建時(shí)間',
    update_time datetime                   not null comment '更新時(shí)間'
)
    comment '權(quán)限表
' collate = utf8_unicode_ci;
-- auto-generated definition
create table cf_admin_roles
(
    id          int unsigned auto_increment comment '角色id'
        primary key,
    name        char(32)                   not null comment '角色名稱',
    role_info   char(32)                   null comment '角色描述',
    is_super    tinyint unsigned default 0 not null comment '是超級(jí)管理員(1:是,0:否)',
    status      tinyint unsigned default 1 not null comment '狀態(tài)(1:可用,2:停用,3:已刪除)',
    create_time datetime                   null comment '創(chuàng)建時(shí)間',
    update_time datetime                   null comment '更新時(shí)間'
)
    comment '角色組表' collate = utf8_unicode_ci;

在為用戶注入權(quán)限后,權(quán)限的校驗(yàn)就變得簡(jiǎn)單起來了,只需要簡(jiǎn)單的注解,調(diào)用即可校驗(yàn)權(quán)限。就在這樣的一個(gè)校驗(yàn)注解,就可以實(shí)現(xiàn)用戶角色,用戶權(quán)限的檢查

// 角色認(rèn)證:必須具有指定角色才能進(jìn)入該方法 
@SaCheckRole("super-admin")     
// 權(quán)限認(rèn)證:必須具有指定權(quán)限才能進(jìn)入該方法 
@SaCheckPermission("user-add") 
//三個(gè)權(quán)限并列,滿足一個(gè)則通過
@SaCheckPermission(value = {"user-add", "user-all", "user-delete"}, mode = SaMode.OR)
//同時(shí)滿足角色和權(quán)限,通過
@SaCheckPermission(value = "user-add", orRole = "admin") 

2.3 token

框架為我們提供了多種token生成方式,以及token 的校驗(yàn)規(guī)則,將一個(gè)用戶標(biāo)記為登錄狀態(tài)后,該用戶就進(jìn)入sa-token 中進(jìn)行統(tǒng)一管理。在配置redis 后,即可實(shí)現(xiàn)到重啟數(shù)據(jù)不丟失,而且保證分布式環(huán)境下多節(jié)點(diǎn)的會(huì)話一致性。

//登錄
StpUtil.login(user.getId());
// 踢下線
StpUtil.kickout(adminUser.getId());
//凍結(jié)
StpUtil.disable(adminUser.getId(), -1);
// 獲取 Token  相關(guān)參數(shù)
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();

在前后臺(tái)的開發(fā)中,我們可以將登錄信息回傳,即可實(shí)現(xiàn)前端通過token 建立訪問,前后端分離。前端可將登錄后返回的token 保存,之后每次進(jìn)行數(shù)據(jù)訪問時(shí)攜帶token ,后端便可以對(duì)請(qǐng)求者的權(quán)限信息校驗(yàn)。

//回傳數(shù)據(jù)
"data":{11 items
	"tokenName":"satoken"
	"tokenValue":"6046ddd3-71cd-4509-b9ca-b842790bda72"
	"isLogin":true
	"loginId":"1002"
	"loginType":"login"
	"tokenTimeout":2592000
	"sessionTimeout":2591999
	"tokenSessionTimeout":-2
	"tokenActivityTimeout":-1
	"loginDevice":"default-device"
	"tag":NULL
}
//redis 緩存數(shù)據(jù)
satoken:login:token:6046ddd3-71cd-4509-b9ca-b842790bda72

2.4 多租戶模式

在我的開發(fā)中,分官網(wǎng)用戶和后臺(tái)用戶,他們是完全不同的兩組數(shù)據(jù),具有各自獨(dú)立的權(quán)限,這時(shí)候需要使用到多租戶模式,對(duì)不同的用戶組維護(hù)各自的權(quán)限。sa-token為我們實(shí)現(xiàn)了一種簡(jiǎn)單的方式,對(duì)不同的組加上對(duì)應(yīng)的標(biāo)簽。之后實(shí)現(xiàn)sa-token 的校驗(yàn)?zāi)J?,便可同?biāo)準(zhǔn)使用方式一樣,對(duì)自己的用戶組校驗(yàn)。

public class StpAdminUtil {
        //權(quán)限組 類型 admin
        public static final String TYPE = "admin";
        //底層logic 靜態(tài)類
        public static StpLogic stpLogic = new StpLogic("admin");
        public StpAdminUtil() {
        }
        public static String getLoginType() {
            return stpLogic.getLoginType();
        }
        public static void setStpLogic(StpLogic stpLogic) {
            cn.dev33.satoken.stp.StpUtil.stpLogic = stpLogic;
            SaManager.putStpLogic(stpLogic);
        }
}
/**
 * 聚合接口
 */
@Configuration
public class SaMultiConfig {
    @Autowired
    public void rewriteSaStrategy() {
        // 重寫Sa-Token的注解處理器,增加注解合并功能
        SaStrategy.me.getAnnotation = (element, annotationClass) -> {
            return AnnotatedElementUtils.getMergedAnnotation(element, annotationClass);
        };
    }
}
/**
 * 登錄認(rèn)證(User版):只有登錄之后才能進(jìn)入該方法
 * <p> 可標(biāo)注在函數(shù)、類上(效果等同于標(biāo)注在此類的所有方法上)
 */
@SaCheckLogin(type = "admin")
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE})
public @interface SaAdminCheckLogin {
}

到此這篇關(guān)于Spring Boot 集成并開發(fā) Sa-token的文章就介紹到這了,更多相關(guān)Spring Boot 集成 Sa-token內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD)

    Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD)

    本篇文章主要介紹了Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • JFormDesigner(IDEA)下載方法

    JFormDesigner(IDEA)下載方法

    JFormDesigner是一種Java Swing GUI設(shè)計(jì)工具,可快速創(chuàng)建用戶界面,支持多種布局管理器,如GridBagLayout、SpringLayout等,本文給大家介紹JFormDesigner(IDEA)下載方法,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • 一文詳解Spring是怎么讀取配置Xml文件的

    一文詳解Spring是怎么讀取配置Xml文件的

    這篇文章主要介紹了一文詳解Spring是怎么讀取配置Xml文件的,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • Java string不可變?cè)韺?shí)例解析

    Java string不可變?cè)韺?shí)例解析

    這篇文章主要介紹了Java string不可變?cè)韺?shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • IDEA中添加xml配置文件時(shí),顯示file問題

    IDEA中添加xml配置文件時(shí),顯示file問題

    這篇文章主要介紹了IDEA中添加xml配置文件時(shí),顯示file問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MAC下基于maven使用IDEA走讀TestNG源碼解析

    MAC下基于maven使用IDEA走讀TestNG源碼解析

    這篇文章主要介紹了MAC下基于maven使用IDEA走讀TestNG源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • java使用xstream實(shí)現(xiàn)xml文件和對(duì)象之間的相互轉(zhuǎn)換

    java使用xstream實(shí)現(xiàn)xml文件和對(duì)象之間的相互轉(zhuǎn)換

    xml是一個(gè)用途比較廣泛的文件類型,在java里也自帶解析xml的包,但是本文使用的是xstream來實(shí)現(xiàn)xml和對(duì)象之間的相互轉(zhuǎn)換,xstream是一個(gè)第三方開源框架,使用起來比較方便,對(duì)java?xml和對(duì)象轉(zhuǎn)換相關(guān)知識(shí)感興趣的朋友一起看看吧
    2023-09-09
  • 解決Maven依賴沖突的方法

    解決Maven依賴沖突的方法

    本文主要介紹了解決Maven依賴沖突的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例

    SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例

    在緩存的使用場(chǎng)景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn)

    Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn)

    本文主要介紹了Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn),是通過Apache Maven Compiler Plugin插件實(shí)現(xiàn)的,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07

最新評(píng)論