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

Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用

 更新時(shí)間:2022年03月23日 09:38:23   作者:jayjay  
Sa-Token是一個(gè)輕量級(jí)Java權(quán)限認(rèn)證框架,本文就詳細(xì)的來(lái)介紹一下Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會(huì)話、單點(diǎn)登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán)等,感興趣的可以了解一下

前言

相信大家都用過(guò)Spring Security和Shiro的框架,Spring Security必須配合Spring 全家桶使用和繁瑣的配置,Shiro簡(jiǎn)單易學(xué)、輕便,但個(gè)人使用下來(lái),覺(jué)得Sa-Token比Shiro更簡(jiǎn)單易學(xué)一點(diǎn),基本是開箱即用。

Sa-Token 是什么?

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

如何使用?

引入依賴

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.29.0</version>
</dependency>

示例代碼

登錄接口就一行代碼:StpUtil.login(id)

@RestController
@RequestMapping
public class LoginController {

? ? @GetMapping("doLogin")
? ? public ResultModel doLogin(String name, String pwd) {
? ? ? ? // 此處僅作模擬示例,真實(shí)項(xiàng)目需要從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)進(jìn)行比對(duì)
? ? ? ? if("jayjay".equals(name) && "123456".equals(pwd)) {
? ? ? ? ? ? StpUtil.login(1001);
? ? ? ? ? ? return ResultModel.success("登錄成功",StpUtil.getTokenInfo());
? ? ? ? }
? ? ? ? return ResultModel.error("登錄失敗");
? ? }

? ? @GetMapping("isLogin")
? ? public ResultModel isLogin() {
? ? ? ? return ResultModel.success("是否登錄:"+StpUtil.isLogin(),StpUtil.getTokenInfo());
? ? }

? ? @GetMapping("logout")
? ? public ResultModel logout() {
? ? ? ? StpUtil.logout();
? ? ? ? return ResultModel.success("登出成功");
? ? }
}

我們登錄一下:

登錄成功,請(qǐng)求isLogin測(cè)試一下是否登錄成功并獲取當(dāng)前登錄用戶

這樣,我們就已經(jīng)完成登錄授權(quán)了,沒(méi)錯(cuò),在 Sa-Token 中,登錄認(rèn)證就是如此簡(jiǎn)單,不需要任何的復(fù)雜前置工作,只需這一行簡(jiǎn)單的API調(diào)用,就可以完成會(huì)話登錄認(rèn)證!

那么要怎么進(jìn)行校驗(yàn)登錄呢?只要在你需要校驗(yàn)登錄處調(diào)用這個(gè)方法就行:

// 然后在需要校驗(yàn)登錄處調(diào)用以下方法:
// 如果當(dāng)前會(huì)話未登錄,這句代碼會(huì)拋出 `NotLoginException` 異常
StpUtil.checkLogin();

當(dāng)然也可以使用注解或者攔截器,這個(gè)后面再說(shuō)

常用方法

在 Sa-Token 中,絕大多數(shù)功能都可以 一行代碼 完成,在這里列舉一下常用方法:

StpUtil.login(10001);    // 標(biāo)記當(dāng)前會(huì)話登錄的賬號(hào)id
StpUtil.getLoginId();    // 獲取當(dāng)前會(huì)話登錄的賬號(hào)id
StpUtil.isLogin();    // 獲取當(dāng)前會(huì)話是否已經(jīng)登錄, 返回true或false
StpUtil.logout();    // 當(dāng)前會(huì)話注銷登錄
StpUtil.kickout(10001);    // 將賬號(hào)為10001的會(huì)話踢下線
StpUtil.hasRole("super-admin");    // 查詢當(dāng)前賬號(hào)是否含有指定角色標(biāo)識(shí), 返回true或false
StpUtil.hasPermission("user:add");    // 查詢當(dāng)前賬號(hào)是否含有指定權(quán)限, 返回true或false
StpUtil.getSession();    // 獲取當(dāng)前賬號(hào)id的Session
StpUtil.getSessionByLoginId(10001);    // 獲取賬號(hào)id為10001的Session
StpUtil.getTokenValueByLoginId(10001);    // 獲取賬號(hào)id為10001的token令牌值
StpUtil.login(10001, "PC");    // 指定設(shè)備標(biāo)識(shí)登錄,常用于“同端互斥登錄”
StpUtil.kickout(10001, "PC");    // 指定賬號(hào)指定設(shè)備標(biāo)識(shí)踢下線 (不同端不受影響)
StpUtil.openSafe(120);    // 在當(dāng)前會(huì)話開啟二級(jí)認(rèn)證,有效期為120秒 
StpUtil.checkSafe();    // 校驗(yàn)當(dāng)前會(huì)話是否處于二級(jí)認(rèn)證有效期內(nèi),校驗(yàn)失敗會(huì)拋出異常 
StpUtil.switchTo(10044);    // 將當(dāng)前會(huì)話身份臨時(shí)切換為其它賬號(hào) 

常用注解

  • @SaCheckLogin: 登錄認(rèn)證 —— 只有登錄之后才能進(jìn)入該方法
  • @SaCheckRole("admin"): 角色認(rèn)證 —— 必須具有指定角色標(biāo)識(shí)才能進(jìn)入該方法
  • @SaCheckPermission("user:add"): 權(quán)限認(rèn)證 —— 必須具有指定權(quán)限才能進(jìn)入該方法
  • @SaCheckSafe: 二級(jí)認(rèn)證校驗(yàn) —— 必須二級(jí)認(rèn)證之后才能進(jìn)入該方法
  • @SaCheckBasic: HttpBasic認(rèn)證 —— 只有通過(guò) Basic 認(rèn)證后才能進(jìn)入該方法

以上注解均可在官網(wǎng)看到用法,我就不一一列舉了
不過(guò),使用注解之前,還要把Sa-Token的攔截器開起來(lái),默認(rèn)是關(guān)閉的

注冊(cè)攔截器

以SpringBoot2.0為例, 新建配置類SaTokenConfigure.java

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

保證此類被springboot啟動(dòng)類掃描到即可

Spring boot 集成

集成比較簡(jiǎn)單,只要添加依賴就行,Sa-Token在Spring Boot中是可以零配置啟動(dòng)的,上面的測(cè)試用例就是零配置啟動(dòng)的
當(dāng)然也可以根據(jù)自己需要在配置

1、在application.yml配置

# Sa-Token配置
sa-token: 
    # token名稱 (同時(shí)也是cookie名稱)
    token-name: satoken
    # token有效期,單位s 默認(rèn)30天, -1代表永不過(guò)期 
    timeout: 2592000
    # token臨時(shí)有效期 (指定時(shí)間內(nèi)無(wú)操作就視為token過(guò)期) 單位: 秒
    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: false
    # token風(fēng)格
    token-style: uuid
    # 是否輸出操作日志 
    is-log: false

2、通過(guò)代碼配置

/**
?* Sa-Token代碼方式進(jìn)行配置
?*/
@Configuration
public class SaTokenConfigure {

? ? // 獲取配置Bean (以代碼的方式配置Sa-Token, 此配置會(huì)覆蓋yml中的配置)
? ? @Bean
? ? @Primary
? ? public SaTokenConfig getSaTokenConfigPrimary() {
? ? ? ? SaTokenConfig config = new SaTokenConfig();
? ? ? ? config.setTokenName("satoken"); ? ? ? ? ? ? // token名稱 (同時(shí)也是cookie名稱)
? ? ? ? config.setTimeout(30 * 24 * 60 * 60); ? ? ? // token有效期,單位s 默認(rèn)30天
? ? ? ? config.setActivityTimeout(-1); ? ? ? ? ? ? ?// token臨時(shí)有效期 (指定時(shí)間內(nèi)無(wú)操作就視為token過(guò)期) 單位: 秒
? ? ? ? config.setIsConcurrent(true); ? ? ? ? ? ? ? // 是否允許同一賬號(hào)并發(fā)登錄 (為true時(shí)允許一起登錄, 為false時(shí)新登錄擠掉舊登錄)?
? ? ? ? config.setIsShare(true); ? ? ? ? ? ? ? ? ? ?// 在多人登錄同一賬號(hào)時(shí),是否共用一個(gè)token (為true時(shí)所有登錄共用一個(gè)token, 為false時(shí)每次登錄新建一個(gè)token)?
? ? ? ? config.setTokenStyle("uuid"); ? ? ? ? ? ? ? // token風(fēng)格?
? ? ? ? config.setIsLog(false); ? ? ? ? ? ? ? ? ? ? // 是否輸出操作日志?
? ? ? ? return config;
? ? }

}

上面配置并非全部配置,所有配置可以在官網(wǎng)查看,根據(jù)自己的需要選擇使用

總結(jié)

其他還有很多功能就不一一介紹了,感興趣的可以去Sa-Token官網(wǎng)了解,初步嘗試還挺不錯(cuò)的,文檔和代碼示例都很全,基本功能都能滿足,源碼簡(jiǎn)單易懂,可以隨意二開,封裝度非常高,因?yàn)槭菄?guó)人開發(fā)的,注釋也是中文的,不用擔(dān)心看不懂。如果你想找一個(gè)開箱即用的登錄授權(quán)框架,可以選擇Sa-Token,特別是接小項(xiàng)目私活的時(shí)候賊好用!

到此這篇關(guān)于Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用的文章就介紹到這了,更多相關(guān)Java Sa-Token內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 新手初學(xué)Java-Map

    新手初學(xué)Java-Map

    Map簡(jiǎn)介:將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。此接口取代 Dictionary 類,后者完全是一個(gè)抽象類,而不是一個(gè)接口
    2021-07-07
  • 詳解Java中多線程異常捕獲Runnable的實(shí)現(xiàn)

    詳解Java中多線程異常捕獲Runnable的實(shí)現(xiàn)

    這篇文章主要介紹了詳解Java中多線程異常捕獲Runnable的實(shí)現(xiàn)的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這樣的知識(shí),需要的朋友可以參考下
    2017-10-10
  • SpringBoot+Vue+Element-ui實(shí)現(xiàn)前后端分離

    SpringBoot+Vue+Element-ui實(shí)現(xiàn)前后端分離

    使用前后端分離的方式,可以減少代碼耦合,本文主要介紹了SpringBoot+Vue+Element-ui實(shí)現(xiàn)前后端分離,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解mybatis plus使用insert沒(méi)有返回主鍵的處理

    詳解mybatis plus使用insert沒(méi)有返回主鍵的處理

    這篇文章主要介紹了詳解mybatis plus使用insert沒(méi)有返回主鍵的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot 整合Tess4J庫(kù)實(shí)現(xiàn)圖片文字識(shí)別案例詳解

    SpringBoot 整合Tess4J庫(kù)實(shí)現(xiàn)圖片文字識(shí)別案例詳解

    Tess4J是一個(gè)基于Tesseract OCR引擎的Java接口,可以用來(lái)識(shí)別圖像中的文本,說(shuō)白了,就是封裝了它的API,讓Java可以直接調(diào)用,今天給大家分享一個(gè)SpringBoot整合Tess4j庫(kù)實(shí)現(xiàn)圖片文字識(shí)別的小案例
    2023-10-10
  • 初識(shí)Java基礎(chǔ)之?dāng)?shù)據(jù)類型與運(yùn)算符

    初識(shí)Java基礎(chǔ)之?dāng)?shù)據(jù)類型與運(yùn)算符

    Java是一種強(qiáng)類型語(yǔ)言,每個(gè)變量都必須聲明其數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之?dāng)?shù)據(jù)類型與運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • java中JSON字符串轉(zhuǎn)換為Map集合的兩種方法

    java中JSON字符串轉(zhuǎn)換為Map集合的兩種方法

    本文主要介紹了java中JSON字符串轉(zhuǎn)換為Map集合,包含了兩種方法,這種需求可能涉及到從外部接口獲取數(shù)據(jù),或者在程序中處理配置信息等,感興趣的可以了解一下
    2024-07-07
  • 淺談java安全編碼指南之死鎖dead lock

    淺談java安全編碼指南之死鎖dead lock

    java中為了保證共享數(shù)據(jù)的安全性,我們引入了鎖的機(jī)制。有了鎖就有可能產(chǎn)生死鎖。死鎖的原因就是多個(gè)線程鎖住了對(duì)方所需要的資源,然后現(xiàn)有的資源又沒(méi)有釋放,從而導(dǎo)致循環(huán)等待的情況。通常來(lái)說(shuō)如果不同的線程對(duì)加鎖和釋放鎖的順序不一致的話,就很有可能產(chǎn)生死鎖。
    2021-06-06
  • IDEA集成JProfiler11可視化工具的詳細(xì)流程(安裝、集成、測(cè)試)

    IDEA集成JProfiler11可視化工具的詳細(xì)流程(安裝、集成、測(cè)試)

    小編打算在IDEA中集成一下JProfiler11(現(xiàn)在有12版本了)工具,到網(wǎng)上搜都沒(méi)有找到合適的,于是自己動(dòng)手寫個(gè),關(guān)于IDEA集成JProfiler11可視化工具(安裝、集成、測(cè)試)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • java jdbc連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查操作

    java jdbc連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查操作

    這篇文章主要為大家詳細(xì)介紹了java jdbc連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評(píng)論

新巴尔虎左旗| 潜江市| 共和县| 尉氏县| 宝山区| 吴川市| 彩票| 沙湾县| 新和县| 永清县| 东丰县| 荣成市| 西宁市| 曲水县| 梁平县| 五华县| 轮台县| 淮安市| 定襄县| 南和县| 苏尼特右旗| 安义县| 余江县| 桐乡市| 江源县| 裕民县| 化州市| 滁州市| 宣城市| 麦盖提县| 囊谦县| 开江县| 砀山县| 尖扎县| 肥城市| 穆棱市| 罗江县| 原平市| 怀宁县| 江川县| 星座|