Spring Security是如何完成身份認證的?

1. 用戶名和密碼被過濾器獲取到,封裝成 Authentication ,通常情況下是 UsernamePasswordAuthenticationToken 這個實現類。

2. AuthenticationManager 身份管理器負責驗證這個 Authentication

3. 認證成功后, AuthenticationManager 身份管理器返回一個被填充滿了信息的(包括上面提到的 權限信息,身份信息,細節信息,但密碼通常會被移除) Authentication 實例。

4. SecurityContextHolder 安全上下文容器將第3步填充了信息的 Authentication ,通過 SecurityContextHolder.getContext().setAuthentication(…)方法,設置到其中。

public class AuthenticationExample {
private static AuthenticationManager am = new SampleAuthenticationManager();
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
測試
while (true) {
System.out.println("Please enter your username:");
String name = in.readLine();
System.out.println("Please enter your password:");
String password = in.readLine();
try {
// 封裝認證信息,未認證通過
Authentication request = new
UsernamePasswordAuthenticationToken(name, password);
// 認證邏輯
Authentication result = am.authenticate(request);
//當前線程綁定認證信息
SecurityContextHolder.getContext().setAuthentication(result);
break;
} catch (AuthenticationException e) {
System.out.println("Authentication failed: " + e.getMessage());
}
}
System.out.println("Successfully authenticated. Security context
contains: " +
SecurityContextHolder.getContext().getAuthentication());
}
}
class SampleAuthenticationManager implements AuthenticationManager {
static final List<GrantedAuthority> AUTHORITIES = new
ArrayList<GrantedAuthority>();
static {
AUTHORITIES.add(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public Authentication authenticate(Authentication auth) throws
AuthenticationException {
// 判斷條件,用戶名和密碼是否相同
if (auth.getName().equals(auth.getCredentials())) {
// 封裝認證信息,認證已通過
return new UsernamePasswordAuthenticationToken(auth.getName(),
auth.getCredentials(), AUTHORITIES);
}
throw new BadCredentialsException("Bad Credentials");
}
}
認證流程

推薦閱讀

技術總體方案設計思路

如何評價代碼的質量-CSDN博客

領域分解識別服務

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

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

相關文章

Python爬蟲實戰:研究xmltodict庫相關技術

1. 引言 1.1 研究背景與意義 氣象數據是環境研究、農業生產、城市規劃等領域的重要基礎。隨著互聯網技術的發展,越來越多的氣象數據以 XML 格式在網絡上公開。XML(可擴展標記語言)因其結構化和自描述性的特點,成為數據交換的標準格式之一。然而,這些數據通常分散在不同的…

中小企業無線局域網絡搭建與優化指南

1. 引言&#xff1a;無線網絡——驅動中國中小企業數字化轉型的引擎 無線網絡已成為現代企業運營的基礎設施&#xff0c;直接影響員工工作效率和客戶體驗。隨著Wi-Fi7技術的成熟和普及&#xff0c;中小企業網絡建設正迎來全新機遇。在數字經濟浪潮席卷全球的今天&#xff0c;無…

【已解決】python的kafka-python包連接kafka報認證失敗

先說原因&#xff1a;安裝python包的時候&#xff0c;多裝了一個kafka的包&#xff1a;kafka 1.3.5 我把py文件打包成二進制文件&#xff0c;在linux上執行就一直報認證失敗&#xff0c;后來確認登錄信息、認證方式沒有問題&#xff0c;把這個kafka包卸載…

傳輸層協議TCP(下)

上一篇https://blog.csdn.net/Small_entreprene/article/details/148193741?sharetypeblogdetail&sharerId148193741&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link 接下來&#xff0c;我們來談論TCP具體的機制&#xff01; 具體TCP機制 …

洛谷B3612 【深進1.例1】求區間和

題目描述 給定 n 個正整數組成的數列 a1?,a2?,?,an? 和 m 個區間 [li?,ri?]&#xff0c;分別求這 m 個區間的區間和。 輸入格式 第一行&#xff0c;為一個正整數 n 。 第二行&#xff0c;為 n 個正整數 a1?,a2?,?,an? 第三行&#xff0c;為一個正整數 m 。 接下…

debian12 修改MariaDB數據庫存儲位置報錯

debian12 修改MariaDB數據庫存儲位置到home報錯 MariaDB 修改存儲路徑后啟動失敗問題解決 更改數據存儲位置 如果需要將數據存儲到其他位置&#xff08;如更大的分區&#xff09;&#xff1a; 停止 MariaDB 服務&#xff1a; bash sudo systemctl stop mariadb 創建新目錄并設…

【評測】flux-dev文生圖模型初體驗

回到目錄 【評測】flux-dev文生圖模型初體驗 1. 安裝基礎環境 參考 modelscope的Flux.1-dev頁面 2. 使用tongyi寫提示詞 幫我用英文寫3個&#xff0c;文生圖片1024*1024的提示詞&#xff0c;準備用flux.dev生成用 [pic03] 3. 運行代碼 4090D滿載運行&#xff0c; 1min左…

PHP7+MySQL5.6 雪里開簡易預約制訪客管理系統V1.0

# PHP7MySQL5.6 雪里開簡易預約制訪客管理系統 V1.0 ## 簡介 本系統是一個基于PHP7和MySQL5.6的封閉校區訪客管理系統&#xff0c;用于管理學生訪客的申請、核銷流程。 導入的賬號預先提交訪客信息(預約制)&#xff0c;無需審核&#xff0c;訪客提交匿名制訪客碼給門衛登記放行…

【深度學習:進階篇】--2.4.BN與神經網絡調優

學習目標 目標 知道常用的一些神經網絡超參數知道BN層的意義以及數學原理 應用 無 目錄 學習目標 1.神經網絡調優 1.1.調參技巧 1.2.運行 2.批標準化&#xff08;Batch Normalization&#xff09; 2.1.標準化公式 2.2.為什么可以優化簡單 2.3.BN總結 1.神經網絡調優 …

CMake指令: add_sub_directory以及工作流程

目錄 1.簡介 2.工作流程 3.示例場景 4.最佳實踐 5.注意事項 6.總結 相關鏈接 1.簡介 add_subdirectory 是 CMake 中用于添加子目錄參與構建的命令&#xff0c;允許將項目拆分為多個模塊或子項目&#xff0c;實現代碼的模塊化管理。 基本語法&#xff1a; add_subdirect…

【C++ 】智能指針:內存管理的 “自動導航儀”

目錄 一、引入 二、智能指針的兩大特性&#xff1a; 1、RAII 特點&#xff1a; 好處&#xff1a; 2、行為像指針 三、智能指針起初的缺陷&#xff1a;拷貝問題 四、幾種智能指針的介紹。 1、C98出現的智能指針——auto_ptr auto_ptr解決上述拷貝構造的問題&#xff1a…

Java多線程實現之線程池詳解

Java多線程實現之線程池詳解 一、線程池的基本概念1.1 為什么需要線程池1.2 線程池的核心思想 二、Java線程池的實現2.1 Executor框架2.2 ThreadPoolExecutor構造參數 三、常見線程池類型3.1 FixedThreadPool3.2 CachedThreadPool3.3 SingleThreadExecutor3.4 ScheduledThreadP…

解碼美元-黃金負相關:LSTM-Attention因果發現與黃金反彈推演

摘要&#xff1a;本文采用時間序列分析框架與自然語言處理&#xff08;NLP&#xff09;技術&#xff0c;對黃金與美元指數的負相關關系進行量化拆解。通過構建包含宏觀經濟因子、市場情緒指標及地緣風險的三維分析模型&#xff0c;揭示當前貴金屬市場的核心驅動邏輯&#xff0c…

Asp.Net Core SignalR導入數據

文章目錄 前言一、安裝包二、使用步驟1.實現SignalR Hub服務&#xff1a;2.實現CSV文件解析及數據導入服務3.控制器4.前端實現&#xff08;vue&#xff09; 三、關鍵技術點說明總結 前言 導入CSV文件中的數據到數據庫&#xff0c;使用CsvHelper解析CSV文件&#xff0c;SqlBulk…

Modern C++(四)聲明

4、聲明 聲明是將名字引入到cpp程序中&#xff0c;不是每條聲明都聲明實際的東西。定義是足以使該名字所標識的實體被使用的聲明。聲明包含以下幾種&#xff1a; 函數定義模板聲明模板顯式實例化模板顯式特化命名空間定義鏈接說明屬性聲明&#xff08;C11&#xff09;空聲明&…

目標檢測yolo算法

yolov5s&#xff1a; 從github官網下載yolov5的算法之后&#xff0c;配置好環境&#xff08;pycharm安裝包-CSDN博客&#xff09;&#xff0c;再下載權重文件&#xff0c;比如默認的yolov5s.pt&#xff1b; 運行當前文件&#xff08;detect.py&#xff09;&#xff0c;就能看…

一個超強的推理增強大模型,開源了,本地部署

大家好&#xff0c;我是 Ai 學習的老章 前幾天介紹了MOE 模型先驅 Mistral 開源的代碼 Agent 大模型——mistralai/Devstral-Small-2505 今天一起看看 Mistral 最新開源的推理大模型——Magistral Magistral 簡介 Mistral 公司推出了首個推理模型 Magistral 及自研可擴展強…

MySQL體系架構解析(五):讀懂MySQL日志文件是優化與故障排查的關鍵

MySQL文件 日志文件 在服務器運行過程中&#xff0c;會產生各種各樣的日志&#xff0c;比如常規的查詢日志&#xff0c;錯誤日志、二進制日志、 redo 日志和 Undo 日志等&#xff0c;日志文件記錄了影響 MySQL 數據庫的各種類型活動。 常見的日志文件有&#xff1a;錯誤日志…

湖南省網絡建設與運維賽項競賽規程及樣題

湖南省職業院校技能競賽樣題 賽題說明 一、競賽內容 “網絡建設與運維”競賽共分三個部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;職業規范與素養 &#xff08; 5 分&#xff09; 第二部分&#xff1a;網絡搭建及安全部署項目 &#xff08; 50 分&#xff09…

華為云Flexus+DeepSeek征文 | 基于華為云ModelArts Studio搭建AnythingLLM聊天助手

華為云FlexusDeepSeek征文 | 基于華為云ModelArts Studio搭建AnythingLLM聊天助手 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、AnythingLLM介紹AnythingLLM 簡介AnythingLLM主要特點AnythingLLM地址 三、安裝AnythingLLM應用下載…