Spring Security自動處理/login請求,后端控制層沒有 @PostMapping(“/login“) 這樣的 Controller 方法

一:前言
(1)Spring Security概念:

Spring Security 是屬于 Spring 生態下一個功能強大且高度可定制的認證和授權框架,它不僅限于 Web 應用程序的安全性,也可以用于保護任何類型的應用程序。

(2)場景描述:

當前端請求 /login 接口,后端并沒有對登錄接口有@PostMapping("/login")的注解,且框架中有使用Spring Security當做權限校驗框架。原因是Spring Security有自動處理解析 /login 接口功能

二:思路整理分析
(1)官方文檔

在Spring Security默認幫我們處理了登錄、登出等接口
文檔地址:表單登錄 :: Spring Security

(2)主要思路:

①前端請求 POST /login,瀏覽器將請求重定向到登錄頁面

②Spring Security 的 UsernamePasswordAuthenticationFilter 攔截,然后提取username 和 password

③調用配置的 UserDetailsService 實例的 loadUserByUsername(username)

④如果返回 UserDetails,繼續密碼比對(PasswordEncoder)

⑤成功 → 認證成功,生成 SecurityContext,失敗 → 拋出異常(如 UsernameNotFoundException)

三:步驟實現
(1)關鍵配置

代碼參考如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers("/login").permitAll().anyRequest().authenticated()).formLogin(Customizer.withDefaults()) // 使用默認表單登錄.csrf().disable(); // 為了測試方便關掉 CSRF(生產不建議)return http.build();}@Beanpublic UserDetailsService userDetailsService() {return new CustomUserDetailsService(); // 自定義實現}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}
(2)繼承實現UserDetailsService 接口,重寫loadUserByUsername(String username)方法

代碼如下:(在此方法中可以執行需要的邏輯)

@Service
public class CustomUserDetailsService implements UserDetailsService {@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {// 查詢數據庫...if (user == null) throw new UsernameNotFoundException("用戶不存在");return new User(user.getUsername(), user.getPassword(), getAuthorities());}
}
(3)登錄完成之后處理(成功、失敗、異常)

以上是我配置的參數

官網文檔:身份驗證事件 :: Spring Security

根據返回的信息,分別處理不同的事件

四:總結

使用Spring Security 框架,可以不需要寫 Controller層的 /login,Spring Security?自動幫我們處理了很多的安全校驗,希望能夠幫助其他小伙伴看懂這個邏輯

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

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

相關文章

idea開發工具中git如何忽略編譯文件build、gradle的文件?

idea開發工具中: git顯示下面這個文件有變更: ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路徑是: ~/Documents/wwwroot-dev/wlxl-backend/…

狀態機淺析

狀態機是處理狀態依賴型行為的高效工具,通過結構化建模狀態轉換,解決了傳統條件判斷的冗余和混亂問題。它在設備控制、流程管理、協議解析等場景中表現優異,核心優勢在于邏輯清晰、可擴展性強和易于調試。 一、介紹 1. 概念 狀態機&#x…

Windows 手動病毒排查指南:不依賴殺毒軟件的系統安全防護

Windows 手動病毒排查指南:不依賴殺毒軟件的系統安全防護 在數字時代,電腦病毒就像潛伏的"網絡幽靈",從竊取隱私的木馬到消耗資源的蠕蟲,時刻威脅著系統安全。當殺毒軟件失效或遭遇新型威脅時,手動排查病毒便…

GPT-5 is here

GPT-5 is here https://openai.com/index/introducing-gpt-5/ — and it’s #1 across the board! #1 in Text, WebDev, and Vision Arena #1 in Hard Prompts, Coding, Math, Creativity, Long Queries, and more Tested under the codename “summit”, GPT-5 now holds the …

【華為機試】55. 跳躍游戲

文章目錄55. 跳躍游戲題目描述示例 1:示例 2:提示:解題思路一、問題本質與建模二、方法總覽與選擇三、貪心算法的正確性(直觀解釋 循環不變式)四、反向貪心:等價但有啟發的視角五、與動態規劃的對比與誤區…

RabbitMQ面試精講 Day 18:內存與磁盤優化配置

【RabbitMQ面試精講 Day 18】內存與磁盤優化配置 開篇:內存與磁盤優化的重要性 歡迎來到"RabbitMQ面試精講"系列的第18天!今天我們將深入探討RabbitMQ的內存與磁盤優化配置,這是面試中經常被問及的高頻主題,也是生產環…

【C++】string 的特性和使用

Ciallo&#xff5e; (∠?ω< )⌒★ string&#xff08;1&#xff09;1. 構造函數1.1 string();1.2 string(const char* s);1.3 string(const string& str);1.4 string(size_t n, char c);1.5 string(const string& str, size_t pos, size_t len npos);1.6 string(…

創始人IP的精神修煉:于成長中積蓄力量

IP 經濟席卷之下&#xff0c;眾多企業家常被 “是否入局 IP”“能否做好 IP” 的焦慮裹挾。這種潛藏的精神內耗&#xff0c;對企業根基的侵蝕往往勝過業績的起伏。著名文化學者于丹在全球創始人 IP 領袖高峰論壇上的洞見&#xff0c;為創始人 IP 的精神成長照亮了前路&#xff…

gbase8s數據庫中對象元數據查詢

最近整理了gbase8s數據庫中常見的元數據的查詢&#xff0c;包括表、視圖、序列、包、類型、觸發器、plsql等等&#xff0c;僅供參考。set environment sqlmode oracle; drop package DBMS_METADATA; create or replace package DBMS_METADATA is function GET_DDL(objtype varc…

常用hook鉤子函數

爬蟲Hook技術常用字段和勾子函數 目錄 Hook技術概述網絡請求相關Hook瀏覽器環境HookJavaScript引擎Hook加密算法Hook反爬蟲檢測Hook實際應用示例Hook工具和框架 Hook技術概述 Hook&#xff08;鉤子&#xff09;技術是一種在程序運行時攔截和修改函數調用的技術。在爬蟲中&a…

【解決方法】華為電腦的亮度調節失靈

華為電腦的亮度調節失靈 參考文章&#xff1a; 華為電腦屏幕亮度怎么調不了&#xff1f;華為電腦調節亮度沒反應解決教程 親測&#xff0c;在控制面板中卸載HWOSD&#xff0c;再重裝有用。

【軟考中級網絡工程師】知識點之 DCC 深度剖析

目錄一、DCC 是什么1.1 定義闡述1.2 作用講解二、DCC 工作原理2.1 撥號觸發機制2.1.1 感興趣流量定義2.1.2 觸發撥號過程2.2 鏈路建立流程2.2.1 物理鏈路連接2.2.2 數據鏈路層協議協商三、DCC 配置要點3.1 基礎配置步驟3.1.1 接口配置3.1.2 撥號映射配置3.2 高級配置參數3.2.1 …

W5500之Socket寄存器區介紹

W5500之Socket寄存器區介紹1)、Socket n模式寄存器(Socket n Mode Register&#xff0c;簡寫Sn_MR)偏移地址為0x0000&#xff0c;可讀寫&#xff0c;復位值為0x00&#xff1b;Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0MULTI/MFENBCASTBND/MC/MMBUCASTB/MIP6BP3P2P1P0MULTI/MFEN占用“S…

酉矩陣(Unitary Matrix)和隨機矩陣

先討論酉矩陣&#xff08;Unitary Matrix&#xff09;的性質。1. 酉矩陣定義酉矩陣&#xff08;Unitary Matrix&#xff09;是復數域上的方陣&#xff0c;滿足以下條件&#xff1a;其中&#xff1a;是 的共軛轉置&#xff08;即 Hermitian 轉置&#xff0c; &#xff09;。是單…

「iOS」————單例與代理

iOS學習單例代理代理模式的原理代理的循環引用設計模式單例 優點&#xff1a; 全局訪問&#xff1a;單例模式確保一個類只有一個實例&#xff0c;并提供全局訪問點&#xff0c;方便在整個應用中共享數據或功能。節省資源&#xff1a;由于只創建一個實例&#xff0c;可以減少內…

Microsoft Dynamics AX 性能優化解決方案

一、方案背景Microsoft Dynamics AX 是功能強大的企業ERP系統&#xff0c;雖然Microsoft 已推出基于云的現代化 ERP 平臺 Dynamics 365 Finance and Operations&#xff0c;提供了更高的性能和持續更新&#xff0c;用來替代Dynamics AX。在考慮升級到Dynamics 365之前&#xff…

ARM保留的標準中斷處理程序入口和外設中斷處理程序入口介紹

在ARM架構中&#xff0c;中斷處理是一個關鍵機制&#xff0c;它允許CPU在執行主程序時能夠響應外部或內部的事件。對于ARM MCU&#xff08;微控制器單元&#xff09;而言&#xff0c;中斷處理程序入口通常分為兩類&#xff1a;ARM保留的標準中斷處理程序入口和外設中斷處理程序…

防火墻環境下的全網服務器數據自動化備份平臺搭建:基于 rsync 的完整實施指南

一、項目總覽 1.內容介紹 本文以 3 臺 CentOS 7.9 服務器&#xff08;Web 服務器、NFS 服務器、備份服務器&#xff09;為載體&#xff0c;詳解如何在全防火墻開啟的前提下&#xff0c;搭建一套自動化數據備份平臺&#xff1a;每日自動打包 Web 站點、NFS 共享數據及系統關鍵…

Spring之【Import】

目錄 Import注解 源碼分析 使用示例 ImportSelector 源碼分析 使用示例 DeferredImportSelector 源碼分析 使用示例 ImportBeanDefinitionRegistrar 源碼分析 使用示例 Import注解 源碼分析 處理組件類上的Import注解 將Import引入類對應的BeanDefinition對象添加…

RN項目環境搭建和使用-Mac版本(模擬器啟動不起來的排查)

ReactNative&#xff1a; https://github.com/facebook/react-native https://reactnative.cn/docs/getting-started &#xff08;可以先通讀一下這個&#xff09; 環境搭建 &#xff08;mac版&#xff09;https://juejin.cn/post/7404860612758765605 搭建之前確認版本&#x…