[spring6: HttpSecurity]-全新寫法

HttpSecurity

HttpSecurity 是 Spring Security 中用于配置基于 HTTP 請求的安全策略的核心構建器,支持細粒度控制請求授權、認證、登錄、登出、CSRF、CORS、會話管理等安全功能。

package xyz.idoly.demo;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http// 請求授權配置.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll()    // /public 下路徑允許所有訪問.requestMatchers("/admin/**").hasRole("ADMIN") // /admin 下路徑需管理員角色.anyRequest().authenticated()                  // 其它請求都需要認證)// 表單登錄配置.formLogin(form -> form.loginPage("/login")      // 自定義登錄頁面.permitAll()              // 登錄頁面允許所有訪問.defaultSuccessUrl("/home", true) // 登錄成功后跳轉主頁)// HTTP Basic 登錄(用于 API 認證).httpBasic(Customizer.withDefaults())// 登出配置.logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login?logout").invalidateHttpSession(true).deleteCookies("JSESSIONID"))// CSRF 保護(默認開啟,示例中未禁用).csrf(csrf -> csrf// 可以定制 CSRF 規則,示例保持默認)// CORS 配置(示例占位).cors(cors -> {// 可以配置 CorsConfigurationSource})// 會話管理.sessionManagement(session -> session.maximumSessions(1).maxSessionsPreventsLogin(true))// 記住我功能.rememberMe(Customizer.withDefaults());return http.build();}
}
方法名功能描述Lambda DSL 示例
authorizeHttpRequests(...)路徑權限控制:根據 URL 路徑定義哪些請求需要認證、授權或匿名訪問。http.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll().anyRequest().authenticated());
formLogin(...)表單登錄配置:啟用表單登錄,自定義登錄頁、成功失敗跳轉路徑等。http.formLogin(form -> form.loginPage("/login").permitAll());
httpBasic(...)HTTP Basic 登錄配置:用于 API 或測試環境的簡單認證。http.httpBasic(Customizer.withDefaults());
logout(...)登出功能配置:定義登出 URL、登出成功跳轉等。http.logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login?logout"));
csrf(...)CSRF 防護:默認啟用,API 項目常禁用。http.csrf(csrf -> csrf.disable());
cors(...)跨域配置:允許跨域請求,適用于前后端分離架構。http.cors(cors -> { /* 配置 CorsSource */ });
headers(...)安全響應頭配置:如 X-Frame-Options 等,提升瀏覽器安全性。http.headers(headers -> headers.frameOptions(frame -> frame.sameOrigin()));
sessionManagement(...)會話管理:控制最大會話數、并發登錄策略等。http.sessionManagement(session -> session.maximumSessions(1).maxSessionsPreventsLogin(true));
exceptionHandling(...)異常處理配置:如訪問拒絕或未認證處理方式。http.exceptionHandling(eh -> eh.accessDeniedPage("/403"));
authenticationManager(...)指定認證管理器:用于自定義認證邏輯入口。http.authenticationManager(authManager);
authenticationProvider(...)注冊認證提供器:支持多種認證邏輯。http.authenticationProvider(customProvider);
userDetailsService(...)設置用戶詳情服務:從用戶名加載權限等。http.userDetailsService(myUserDetailsService);
securityMatcher(...)限定配置作用路徑:只對指定路徑生效。http.securityMatcher("/api/**");
addFilter(...)添加自定義 Filter 到過濾器鏈。http.addFilter(new CustomFilter());
addFilterBefore(...)在指定 Filter 之前添加 Filter。http.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class);
addFilterAfter(...)在指定 Filter 之后添加 Filter。http.addFilterAfter(new CustomFilter(), SecurityContextPersistenceFilter.class);
addFilterAt(...)精確替換指定 Filter 位置。http.addFilterAt(new CustomFilter(), BasicAuthenticationFilter.class);
with(...)啟用自定義 DSL 模塊,替代 apply(…)。http.with(MyDsl.class, dsl -> dsl.customOption(...));
redirectToHttps(...)強制 HTTPS 跳轉:配置端口映射后啟用。http.redirectToHttps(https -> https.portMapper(mapper -> mapper.http(8080).mapsTo(8443)));
dispatcherTypeMatchers(...)匹配 DispatcherType,如 ERROR、ASYNC。http.authorizeHttpRequests(auth -> auth.dispatcherTypeMatchers(DispatcherType.ERROR).permitAll());
passwordManagement(...)密碼管理入口配置:啟用密碼修改功能。http.passwordManagement(pm -> pm.changePasswordPage("/change-password"));
oidcLogout(...)配置 OIDC 單點登出功能。http.oidcLogout(oidc -> oidc.backChannel());
oneTimeTokenLogin(...)啟用一次性登錄令牌功能。http.oneTimeTokenLogin(token -> token.loginUrl("/login/token"));
webAuthn(...)WebAuthn 無密碼認證配置。http.webAuthn(wa -> wa.rpName("MyApp"));
setSharedObject(...)注入共享對象供后續配置使用。http.setSharedObject(CustomService.class, myService);
build() / performBuild()構建過濾器鏈,返回 SecurityFilterChain。return http.build();

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

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

相關文章

MIPI DSI 轉 1LVDS ,分辨率1920*1080.

一款橋接芯片,它接收 MP DSI 輸入并發送 LVDS 輸出。MlPI DSI 支持至多 4 條通道,每條通道的最大傳輸速率為 1Gbps,總的最大輸入帶寬為 4Gbps,并且還支持 MlPI 定義的 ULPS(超低功耗狀態)。LVDS 輸出采用 V…

墨者:SQL手工注入漏洞測試(MySQL數據庫)

一、SQL手工注入漏洞測試(MySQL數據庫) 本文以墨者學院靶場為例,演示MySQL數據庫的手工SQL注入全過程。靶場以自己的地址為準:http://124.70.64.48:47777/new_list.php?id1 二、注入原理與流程(如下指令去掉了id之前的內容) M…

idea打開后project窗口未顯示項目名稱的解決方案

前言 今天上班后,打開了idea發現之前project窗口中的項目都不見了,啥也沒有,見下圖原因 一般為配置文件*.iml 出錯了。 解決方案1 方法1:若知道出錯的具體位置與原因,用文本編輯器打開*.iml文件,找到出錯位…

不一樣的Mysql安裝方式

文章目錄MySQL介紹與安裝MySQL介紹基本安裝下載打開網址點擊點擊選擇LTSwindows選擇zip壓縮包格式,mac OS選擇dmg格式。不需要注冊登陸網站,直接謝謝,繼續下載即可。解壓復制bin路徑配置環境變量搜索點擊環境變量點擊用戶變量的Path 或 系統變…

MyBatis高級應用實戰指南

MyBatis高級應用實例 以下是MyBatis高級應用實例,涵蓋復雜查詢、動態SQL、插件開發、緩存優化等場景,幫助深入掌握MyBatis核心技術。 動態SQL構建 Example 1: 多條件動態查詢 使用<if>和<where>標簽實現條件組合: <select id="findUsers" resu…

Xilinx-FPGA-PCIe-XDMA 驅動內核兼容性問題修復方案

問題1&#xff1a;implicit declaration of function "mmiowb()"解決方法&#xff1a;在 libxdma.c 和 cdev_xvc.c 文件中注釋掉所有 mmiowb () 函數調用問題2&#xff1a; "macro"access_ok"passed 3 arguments, but takes just 2"解決方法&…

ThreadLocal--ThreadLocal介紹

&#x1f9e0; 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 Java 提供的一種 線程本地變量機制&#xff1b; 每個線程都維護一份自己的副本&#xff1b; 它不用于多個線程共享變量&#xff0c;而是用于每個線程獨立維護自己的變量副本&#xff1b; 常用于&#xff1…

AWS云S3+Glue+EMRonEC2+ReadShift

Amazon S3&#xff08;Amazon Simple Storage Service&#xff09;即亞馬遜簡單存儲服務&#xff0c;是 AWS&#xff08;Amazon Web Services&#xff09;提供的一種對象存儲服務&#xff0c;在大數據領域被廣泛使用。以下是關于它的詳細介紹&#xff1a;基本概念Amazon S3 主要…

OpenLayers 綜合案例-軌跡回放

看過的知識不等于學會。唯有用心總結、系統記錄&#xff0c;并通過溫故知新反復實踐&#xff0c;才能真正掌握一二 作為一名摸爬滾打三年的前端開發&#xff0c;開源社區給了我飯碗&#xff0c;我也將所學的知識體系回饋給大家&#xff0c;助你少走彎路&#xff01; OpenLayers…

語音自動生成PPT、思維導圖、會議紀要、筆記、大綱、導讀等

一、需要用到錄音工具&#xff0c;手機端工具&#xff1a;訊飛聽見二、需要用到的工具通義&#xff1a;https://www.tongyi.com/discover上傳錄音&#xff0c;描述一下&#xff0c;讓直接給生成PPT就行&#xff0c;點生成就可以生成ppt&#xff0c;對PPT進行導出就行 三、除了生…

【MySQL】腳本化快速搭建跨平臺、可定制的MySQL數據庫

冗長的廢話就省略了&#xff0c;大家看到這篇博客&#xff0c;效果如標題所示&#xff0c;我將提供完整的腳本&#xff0c;并用 「保姆級」的詳細步驟&#xff0c;給你提供一個快速搭建跨平臺、可定制的 MySQL環境的解決方案。保證無論你是 Linux 服務器管理員、macOS 開發者&a…

MAC包頭、IP包頭 、UDP包頭中的長度含義是啥?三者之間有啥區別?

以太網幀、IP包及TCP與UDP的報文格式 下面用通俗技術的方式詳細解釋&#xff1a; 1. MAC包頭&#xff08;以太網幀頭&#xff09;中的長度 字段名稱&#xff1a;EtherType/Length位置&#xff1a;以太網幀頭的第13、14字節含義&#xff1a; 如果值小于等于1500&#xff08;0x0…

Multiscale Structure Guided Diffusion for Image Deblurring 論文閱讀

基于多尺度結構引導擴散模型的圖像去模糊 摘要 擴散概率模型&#xff08;Diffusion Probabilistic Models, DPMs&#xff09;最近被用于圖像去模糊&#xff0c;其被表述為一個以模糊輸入為條件的圖像條件生成過程&#xff0c;將高斯噪聲映射到高質量圖像。當在成對的域內數據上…

git 提交時排除一個或多個文件

前言 在提交文件時&#xff0c;總是有一些文件是不需要提交的&#xff0c;比如機器上的配置文件&#xff0c;日志文件等等&#xff0c;所以在提交時就需要排除這些文件&#xff1b; 第一種方案 git add file1 file2 比如我新添加了3個文件&#xff1a; file1.txt file2.txt fil…

OpenCV 入門:基礎圖像操作

在計算機視覺領域&#xff0c;OpenCV 無疑是最受歡迎的開源庫之一。它由 Intel 公司俄羅斯團隊發起&#xff0c;如今已成為處理圖像和視頻的強大工具。本文我會介紹OpenCV 的基礎知識&#xff0c;從圖像的讀寫顯示到實時視頻流處理&#xff0c;邁出計算機視覺的第一步。 目錄 …

大語言模型 LLM 通過 Excel 知識庫 增強日志分析,根因分析能力的技術方案(3):使用云平臺最小外部依賴方案

文章大綱 1 方案總覽(與官方文檔映射) 2 環境準備(一步完成) 3 數據層(零代碼遷移 Excel → BigQuery 或 SQLite) 4 函數聲明(JSON Schema 與官方示例一致) 5 Cloud Function(**最小外部依賴**) 6 客戶端調用(對齊官方 Python 示例) 7 Token 與性能對比(官方計費口…

C++高效實現軌跡規劃、自動泊車、RTS游戲、戰術迂回包抄、空中軌跡、手術機器人、KD樹

C++ 算法匯總 基于C++的城市道路場景 以下是基于C++的城市道路場景中車輛緊急變道軌跡生成的實現方法和示例代碼。內容涵蓋軌跡規劃算法、數學建模及代碼實現,適用于自動駕駛或駕駛輔助系統開發。 基于多項式曲線的軌跡生成 采用五次多項式(Quintic Polynomial)生成平滑…

電動汽車轉向系統及其工作原理

電動汽車的轉向系統作為電動汽車的一個關鍵系統&#xff0c;與燃油車的轉向系統有著較大差異。電動汽車的轉向系統主要分為 電動助力轉向&#xff08;EPS, Electric Power Steering&#xff09; 、電動液壓助力轉向系統&#xff08;EHPS, Electro-Hydraulic Power Steering&…

TCP/IP 體系結構網絡接口層的原理

TCP/IP 網絡接口層詳解 網絡接口層&#xff08;Network Interface Layer&#xff09;是 TCP/IP 模型的最底層&#xff08;對應 OSI 模型的物理層 數據鏈路層&#xff09;&#xff0c;負責在物理網絡中傳輸原始比特流&#xff0c;實現相鄰設備之間的可靠數據傳輸。核心功能物理…

筆記本鍵盤的啟用和禁用

管理員 打開 CMD&#xff1a;這一步要求以管理員權限打開命令提示符&#xff08;Command Prompt&#xff09;。在Windows系統中&#xff0c;可以通過搜索“cmd”&#xff0c;然后右鍵選擇“以管理員身份運行”來實現。sc config i8042prt start disabled (關閉筆記本鍵盤)&…