天天看點

輕量級 Java 權限認證架構Sa-Token初體驗(三)

作者:CTRL+CV程式猴
輕量級 Java 權限認證架構Sa-Token初體驗(三)

Sa-Token

經過前兩篇文章的體驗,我已經初步接觸了Sa-Token的登入、退出、線上狀态檢測以及前後端分離的實作。這次來體驗Sa-Token部分常用配置。

sa-toekn.token-name token名稱

首先是前文用到過的token-name,token-name用來指定token的名稱,如果不指定,預設的名稱是satoken,我們删掉所有配置來測試一下。

輕量級 Java 權限認證架構Sa-Token初體驗(三)

隻留端口配置

這時執行登陸,檢視傳回内容

輕量級 Java 權限認證架構Sa-Token初體驗(三)

預設tokenName

可以看到預設的token名稱是satoken,我們可以通過修改token-name配置,指定我們需要的token名稱

sa-token:
  token-name: token           

再次登入

輕量級 Java 權限認證架構Sa-Token初體驗(三)

被修改的token名稱

sa-toekn.timeout 逾時時間

逾時時間,預設是三十天,機關是秒,我們來配置個5秒逾時,驗證一下是否好用

sa-token:
  token-name: token
  timeout: 5           

執行登入,然後檢視登陸狀态

輕量級 Java 權限認證架構Sa-Token初體驗(三)

登入成功

5秒後再次查詢登陸狀态

輕量級 Java 權限認證架構Sa-Token初體驗(三)

已逾時掉線

sa-toekn.activity-timeout 臨時逾時時間

輕量級 Java 權限認證架構Sa-Token初體驗(三)

官方介紹

說實話看到這個介紹我還是有點開心的,因為曾經開發過類似的業務,但是還有什麼比架構本身就支援來得更舒服呢?把逾時時間注釋掉,加上把臨時有效期設定為5s再測試一波。

先登入,再多次查詢登入狀态,不出意外的5s以後掉線了[泣不成聲],趕快看看文檔,文檔裡寫着:在每次直接或間接調用getLoginId()時進行一次過期檢查與續簽操作。想想也對,畢竟在需要身份認證的接口中每次通路都要擷取使用者Id的,沒毛病,暫且先在檢查登入狀态接口擷取一下ID進行傳回,修改代碼再測試。

// 查詢登入狀态,浏覽器通路: http://localhost:9999/user/isLogin
@RequestMapping("isLogin")
public String isLogin() {
    return "目前會話是否登入:" + StpUtil.isLogin() + (StpUtil.isLogin() ? "登入的Id:"+StpUtil.getLoginId() : "") ;
}           

這次就沒問題了,在不停地重新請求接口的過程中,沒有發生掉線的情況

輕量級 Java 權限認證架構Sa-Token初體驗(三)

重新整理接口

在5s無操作之後,再次重新整理

輕量級 Java 權限認證架構Sa-Token初體驗(三)

逾時掉線

這時候就正常掉線了,真的很友善。該功能測試完畢,修改成一個常用的逾時時間,開始測試其他配置。

sa-toekn.is-concurrent 同賬号并發登入(多地登入)

這個配置也是一個常用的配置,有些系統同一個賬号同一時間隻允許在一個裝置上登入,有些系統則沒有這樣的限制,現在配置裡增加:

sa-token:
  #  是否允許同一賬号并發登入
  is-concurrent: true           

再利用兩個浏覽器分别執行登陸,檢查登入狀态

輕量級 Java 權限認證架構Sa-Token初體驗(三)

可以看到兩個浏覽器都登入成功,并且得到了相同的token值,檢查登入狀态

輕量級 Java 權限認證架構Sa-Token初體驗(三)

登入狀态

也可以擷取到相同的登入資訊,我們修改配置為false,再次運作

sa-token:
  #  是否允許同一賬号并發登入
  is-concurrent: false           

首先分别執行登陸

輕量級 Java 權限認證架構Sa-Token初體驗(三)

登入情況

再分别檢視登陸狀态

輕量級 Java 權限認證架構Sa-Token初體驗(三)

登陸狀态

可以确定,首先登入的那個已經被擠下線了

sa-toekn.is-share 同賬号并發登入是否共用Token

這個也是一個非常實用的功能,如果希望同賬号在不同裝置登陸時享有單獨的逾時時間、裝置标簽等,就可以不共用token,反之就可以公用token,保證賬号一處登出,所有裝置同時下線,增加安全性。

更多配置

官方文檔提供詳盡的配置項表格,有興趣的可以去檢視文檔,可以說是非常實用了。

參數名稱 類型 預設值 說明
tokenName String satoken token名稱 (同時也是cookie名稱)
timeout long 2592000 token有效期,機關/秒 預設30天,-1代表永久有效 參考:token有效期詳解
activityTimeout -1 token臨時有效期 (指定時間内無操作就視為token過期) 機關: 秒, 預設-1 代表不限制 (例如可以設定為1800代表30分鐘内無操作就過期) 參考:token有效期詳解
isConcurrent Boolean true 是否允許同一賬号并發登入 (為true時允許一起登入, 為false時新登入擠掉舊登入)
isShare 在多人登入同一賬号時,是否共用一個token (為true時所有登入共用一個token, 為false時每次登入建立一個token)
isReadBody 是否嘗試從 請求體 裡讀取 Token
isReadHead 是否嘗試從 header 裡讀取 Token
isReadCookie 是否嘗試從 cookie 裡讀取 Token
tokenStyle uuid token風格, 參考:自定義Token風格
dataRefreshPeriod int 30 預設dao層實作類中,每次清理過期資料間隔的時間 (機關: 秒) ,預設值30秒,設定為-1代表不啟動定時清理
tokenSessionCheckLogin 擷取 Token-Session 時是否必須登入 (如果配置為true,會在每次擷取 Token-Session 時校驗是否登入)
autoRenew 是否打開自動續簽 (如果此值為true, 架構會在每次直接或間接調用 getLoginId() 時進行一次過期檢查與續簽操作)
tokenPrefix null token字首, 例如填寫 Bearer 實際傳參 satoken: Bearer xxxx-xxxx-xxxx-xxxx 參考:自定義Token字首
isPrint 是否在初始化配置時列印版本字元畫
isLog false 是否列印記錄檔
jwtSecretKey jwt秘鑰 (隻有內建 sa-token-temp-jwt 子產品時此參數才會生效)
idTokenTimeout 86400 Id-Token的有效期 (機關: 秒)
basic "" Http Basic 認證的賬号和密碼 參考:Http Basic 認證
currDomain 配置目前項目的網絡通路位址
checkIdToken 是否校驗Id-Token(部分rpc插件有效)
sso Object new SaSsoConfig() SSO 單點登入相關配置
cookie new SaCookieConfig() Cookie配置對象

繼續閱讀