SaTokenException: 未能獲取對應StpLogic 問題解決


📝 Sa-Token 異常處:未能獲取對應StpLogic,type=user


🧨 異常信息

cn.dev33.satoken.exception.SaTokenException: 未能獲取對應StpLogic,type=user

拋出位置

throw new SaTokenException("未能獲取對應StpLogic,type="+ loginType).setCode(SaErrorCode.CODE_10002);

📌 問題原因分析

編號原因說明
1type=user 拼寫錯誤或未定義使用字符串 "user" 作為類型標識時,若未正確注冊,或拼寫錯誤(如 user vs user1),會導致找不到對應的 StpLogic 實例。
2自定義 StpLogic 未初始化若通過 new StpLogic(TYPE) 定義了自定義邏輯,但未在 Spring 容器中初始化,或未主動調用相關方法,會導致 StpLogic 實例為 null
3未注冊到 Sa-Token 全局管理器即使創建了 StpLogic 實例,也必須通過 SaManager.putStpLogic() 注冊到 Sa-Token 的全局上下文中,否則無法通過 type=user 查找。

? 解決方案

方案 1:使用 @PostConstruct 初始化并注冊 StpLogic

步驟

  1. 在配置類(如 SatokenConfigure.java)中取消注釋以下代碼:
    @PostConstruct
    @Order(0)
    public void registerUserStpLogic() {// 初始化 stpLogic,確保后續能正確獲取StpUserUtil.getStpLogic();// 注冊到 Sa-Token 全局管理器cn.dev33.satoken.SaManager.putStpLogic(StpUserUtil.stpLogic);
    }
    
  2. 關鍵點
    • @PostConstruct 確保方法在 Spring 容器初始化后執行。
    • @Order(0) 保證該方法在其他初始化邏輯(如 rewriteSaStrategy())之前運行。

方案 2:使用 @Component 自動初始化 StpUserUtil

步驟

  1. StpUserUtil.java 類上添加注解:
    @Component
    public class StpUserUtil {...
    }
    
  2. 作用
    • Spring 會自動加載該類,觸發靜態屬性的初始化(如 StpLogic stpLogic)。
    • 無需手動調用 getStpLogic()@PostConstruct

方案 3:手動調用初始化方法

適用于:不想修改配置或注解的情況。

步驟

  1. 在 Spring Boot 啟動類中手動調用:
    @SpringBootApplication
    public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);// 手動觸發初始化StpUserUtil.getStpLogic();cn.dev33.satoken.SaManager.putStpLogic(StpUserUtil.stpLogic);}
    }
    

? 驗證方法

  1. 登錄測試
    • 調用 /userLogin 接口登錄,確保返回 Token。
  2. 權限校驗測試
    • 調用 /checkUserLogin 接口,請求頭中攜帶 Token。
    • 預期結果:返回 {"data": true, ...},表示驗證通過。
  3. 日志檢查
    • 檢查控制臺是否仍有 SaTokenException 拋出。

🔄 常見錯誤排查

檢查項建議操作
type=user 是否拼寫錯誤?使用常量替代字符串,如 public static final String TYPE = "user";
StpUserUtil.stpLogic 是否為 null在啟動日志中打印 StpUserUtil.stpLogic 的值,確認是否初始化成功。
是否注冊到 SaManagerSatokenConfigure.java 中檢查 SaManager.putStpLogic(...) 是否執行。
Spring 是否加載了 StpUserUtil確保 @Component 被啟用,或手動調用初始化方法。

📚 代碼示例

StpUserUtil.java

@Component
public class StpUserUtil {public static final String TYPE = "user";public static StpLogic stpLogic = new StpLogic(TYPE) {@Overridepublic String splicingKeyTokenName() {return super.splicingKeyTokenName() + "-user";  // satoken-user}};public static StpLogic getStpLogic() {return stpLogic;}
}

SatokenConfigure.java

@Configuration
public class SatokenConfigure {@PostConstruct@Order(0)public void registerUserStpLogic() {StpUserUtil.getStpLogic();  // 觸發初始化SaManager.putStpLogic(StpUserUtil.stpLogic);  // 注冊到 Sa-Token}
}

🧩 補充建議

  1. 配置文件檢查
    • application.yml 中確認 Sa-Token 的配置是否正確,例如:
      sa-token:token-name: satokentimeout: 86400
      
  2. 組件掃描
    • 確保 StpUserUtil 所在包被 Spring Boot 的組件掃描覆蓋(@SpringBootApplication 包路徑)。
  3. 多租戶場景
    • 如果使用多 StpLogic(如 useradmin),需為每個類型單獨注冊。

? 總結

原因解決方案
type=user 拼寫錯誤使用常量替代字符串
StpLogic 未初始化使用 @PostConstruct@Component
未注冊到 SaManager調用 SaManager.putStpLogic(...)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92009.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web前端性能優化原理與方法

一、概述 1.1 性能對業務的影響 大部分網站的作用是:產品信息載體、用戶交互工具或商品流通渠道。這就要求網站與更多用戶建立聯系,同時還要保持良好的用戶黏性,所以網站就不能只關注自我表達,而不顧及用戶是否喜歡。看看網站性…

第十八節:第六部分:java高級:注解、自定義注解、元注解

認識注解自定義注解注解的原理元注解常用的兩個元注解代碼: MyTest1(注解類) package com.itheima.day10_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retent…

北京科技企業在軟文推廣發稿平臺發布文章,如何精準觸達客戶?

大家好!我是你們的老朋友,今天咱們聊聊北京科技企業如何通過軟文推廣發稿平臺精準觸達目標客戶這個話題。作為企業營銷的老司機,我深知在這個信息爆炸的時代,如何讓你的品牌聲音被目標客戶聽到是多么重要。下面就讓我來分享一些實…

UE蒙太奇和動畫序列有什么區別?

在 UE5 中,Animation Sequence(動畫序列)和 Animation Montage(動畫蒙太奇)雖然都能播放骨骼動畫,但它們的定位、功能和使用場景有較大區別:1. 概念定位Animation Sequence(動畫序列…

Nordic打印RTT[屏蔽打印中的<info> app]

屏蔽打印中的 app Nordic原裝的程序答應是這樣的,這個有" app"打印,因為習慣問題,有時候也不想打印太多造成RTT VIEW顯示被沖點,所以要把" app"去掉:這里把prefix_process函數調用屏蔽到,主要涉及到nrf_log_hexdump_entry_process和nrf_log_std_entry_proc…

Python基礎和高級【抽取復習】

1.Python 的深拷貝和淺拷貝有什么區別? 淺拷貝【ls.copy()】: 將列表的不可變對象【值】復制一份,同時引用其中的可變對象【列表】,共用一個內存地址 深拷貝【lscopy.deepcopy(list)】: 完全的復制原可變對象&#xff…

TinyPiXOS組件開發(一):開發規范、組件開發方法介紹,快速上手組件開發,創造各種有趣的UI組件!

本文將通過實現一個點擊切換進度的電量指示燈組件和exampleGUI組件庫介紹如何基于TinyPiXOS開發新組件。主要內容包括組件開發規范、自定義組件開發和組件庫開發三部分。 組件開發規范 命名規范 采用tp開頭命名組件類,名稱具備易讀性。 目錄規范 頭文件放置 in…

主流熔斷方案選型指南

主流熔斷方案選型1. Netflix Hystrix (經典但已停止維護)適用場景:傳統Spring Cloud項目,需要快速集成熔斷功能優點:成熟穩定,社區資源豐富與Spring Cloud Netflix套件無縫集成提供熔斷、降級、隔離等完整功能缺點:已停…

Django中get()與filter()對比

在 Django 中,get() 和 filter() 是 QuerySet API 中用于檢索數據的兩個核心方法,它們的功能和使用場景有明顯區別。以下是詳細對比: 1. 核心區別特性get()filter()返回值單個對象(模型實例)查詢集(QuerySe…

MySQL鎖(一) 概述與分類

1.1 MySQL鎖的由來 客戶端發往 MySQL 的一條條 SQL 語句,實際上都可以理解成一個個單獨的事務(一條sql語句默認就是一個事務)。而事務是基于數據庫連接的,每個數據庫連接在 MySQL 中,又會用一條工作線程來維護&#x…

PyTorch里的張量及張量的操作

張量的簡介 張量是多重線性映射在給定基下的坐標表示,可視為向量和矩陣的泛化。 0 維張量:標量(如 5)1 維張量:向量(如 [1, 2, 3])2 維張量:矩陣(如 [[1, 2], [3, 4]]&…

向量數據庫Faiss vs Qdrant全面對比

Faiss vs Qdrant 全面對比表 向量數據庫是一種相對較新的方式,用于與來自不透明機器學習模型(如深度學習架構)派生的抽象數據表示進行交互。這些表示通常被稱為向量或嵌入(embeddings),它們是用于訓練機器學習模型完成諸如情感分析、語音識別、目標檢測等任務的數據的壓…

2025年AIR SCI1區TOP,縮減因子分數階蜣螂優化算法FORDBO,深度解析+性能實測

目錄1.摘要2.蜣螂優化算法DBO原理3.改進策略4.結果展示5.參考文獻6.代碼獲取7.算法輔導應用定制讀者交流1.摘要 傳統DBO存在探索與開發能力失衡、求解精度低以及易陷入局部最優等問題。因此,本文提出了帶有縮減因子分數階蜣螂優化算法(FORDBO&#xff0…

爬蟲逆向之JS混淆案例(全國招標公告公示搜索引擎 type__1017逆向)

案例https://ctbpsp.com/#/ 截至2025.07.19可用 定位加密位置 加密位置: 定位方式,XHR,跟棧 跟棧 QL打斷點,重新斷住 分析為,一個函數傳入四個參數 var QL QI[d9(Nv.mQ)](QJ, Qh, Qv, this[d9(Nv.m9)][0xa1a * …

Hive常用命令總結

一、數據庫操作 -- 創建數據庫(默認路徑) CREATE DATABASE IF NOT EXISTS myhive;-- 指定路徑創建數據庫 CREATE DATABASE myhive2 LOCATION /myhive2;-- 查看數據庫信息 DESC DATABASE myhive;-- 刪除數據庫(強制刪除表) DROP DA…

Spring整合MyBatis詳解

Spring整合MyBatis詳解一、整合優勢與核心思路1.1 整合優勢1.2 核心整合思路二、環境搭建與依賴配置2.1 開發環境2.2 Maven依賴配置三、整合配置(核心步驟)3.1 數據庫配置文件(db.properties)3.2 Spring配置文件(sprin…

Windows CMD(命令提示符)中最常用的命令匯總和實戰示例

CMD命令匯總 下面是 Windows CMD(命令提示符)中最常用的命令匯總,共 30 個,包含說明和典型代碼示例,適合日常開發、系統操作、文件管理、網絡診斷等場景。一、文件與目錄操作(最常用)命令說明示…

嵌入式硬件篇---舵機(示波器)

舵機是一種高精度的角度控制執行器件,廣泛應用于機器人、航模、自動化設備等領域。其核心特點是能通過控制信號精準定位到特定角度(通常范圍為 0-180,部分可到 360 連續旋轉)。常見的舵機類型可根據結構、控制方式、用途等維度劃分…

嵌入式硬件篇---按鍵

按鍵是電子系統中最基礎的人機交互部件,通過機械或電子方式實現電路通斷或狀態切換。根據結構和工作原理的不同,常見按鍵可分為機械按鍵、薄膜按鍵、觸摸按鍵等,以下詳細介紹其工作原理、應用場景及電路特點:一、機械按鍵&#xf…

試用SAP BTP 06:AI服務-Data Attribute Recommendation

創建實例 方法一:BTP主控室-子賬戶-服務市場 輸入實例配置信息,下一步 不用參數,下一步 審核實例,點擊創建 實例創建完成后,創建服務鍵值 輸入鍵值名稱,點擊 創建 方法二(建議)&…