【Spring】springSecurity使用

一、基本配置

1. 引入依賴

在Spring Boot項目中,使用Spring Security首先需要引入相應的依賴。在pom.xml中添加spring-boot-starter-security依賴:

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-security</artifactId>  
</dependency>
2. 配置安全規則

Spring Security提供了多種配置安全規則的方式,包括使用Java配置類、注解或XML配置文件。在Spring Boot項目中,通常使用Java配置類來配置安全規則。

通過繼承WebSecurityConfigurerAdapter類并重寫其configure方法,可以定義用戶認證和授權的相關規則。例如:

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  @Autowired  private UserDetailsService userDetailsService;  @Override  protected void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .antMatchers("/login", "/register").permitAll() // 允許匿名訪問登錄和注冊頁面  .anyRequest().authenticated() // 其他請求都需要認證  .and()  .formLogin()  .loginPage("/login") // 自定義登錄頁面  .permitAll()  .and()  .logout()  .permitAll(); // 允許匿名用戶訪問注銷URL  }  @Autowired  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {  auth  .userDetailsService(userDetailsService)  .passwordEncoder(passwordEncoder()); // 使用密碼編碼器  }  @Bean  public PasswordEncoder passwordEncoder() {  return new BCryptPasswordEncoder(); // 使用BCrypt進行密碼加密  }  
}

二、認證過程

Spring Security的認證過程通常涉及以下幾個步驟:

  1. 用戶提交認證信息:用戶通過表單或其他方式提交用戶名和密碼等認證信息。

  2. AuthenticationFilter攔截請求:Spring Security中的UsernamePasswordAuthenticationFilter(或其他自定義的認證過濾器)會攔截用戶的登錄請求。

  3. 封裝認證信息:過濾器將請求中的認證信息封裝成UsernamePasswordAuthenticationToken對象。

  4. 調用AuthenticationManager:將封裝好的AuthenticationToken傳遞給AuthenticationManager進行認證。

  5. 認證提供者執行認證AuthenticationManager會調用一個或多個AuthenticationProvider進行實際的認證操作。AuthenticationProvider會調用UserDetailsService來獲取用戶信息,并與提交的認證信息進行比對。

  6. 認證成功或失敗:如果認證成功,會將用戶的認證信息封裝成Authentication對象,并存儲在SecurityContextHolder中,供后續操作使用;如果認證失敗,則拋出異常,并由Spring Security處理相應的錯誤響應。

三、授權過程

授權過程是在用戶認證成功后進行的,用于控制用戶對資源的訪問權限。

  1. 訪問資源:用戶嘗試訪問某個受保護的資源。

  2. 攔截器攔截請求:Spring Security中的攔截器(如FilterSecurityInterceptor)會攔截用戶的請求。

  3. 獲取所需權限:攔截器會調用FilterInvocationSecurityMetadataSource來獲取被攔截URL所需的全部權限。

  4. 訪問決策:攔截器會調用AccessDecisionManager進行訪問決策。AccessDecisionManager會根據用戶的認證信息、請求的URL和配置的權限規則來判斷用戶是否有權訪問該資源。

  5. 授權成功或失敗:如果授權成功,用戶可以繼續訪問資源;如果授權失敗,則拋出異常,并由Spring Security處理相應的錯誤響應。

四、其他功能

除了基本的認證和授權功能外,Spring Security還提供了許多其他安全相關的功能,如:

  • 防止跨站請求偽造(CSRF):Spring Security可以自動為表單添加CSRF令牌,并驗證提交請求中的令牌值,以防止CSRF攻擊。
  • 會話管理:Spring Security提供了會話固定保護、會話超時等會話管理功能。
  • 加密和簽名:Spring Security支持使用加密算法對敏感信息進行加密,以及使用簽名算法對消息進行簽名和驗證,以確保信息的機密性和完整性。

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

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

相關文章

Kodcloud可道云安裝與一鍵發布上線實現遠程訪問詳細教程

文章目錄 1.前言2. Kodcloud網站搭建2.1. Kodcloud下載和安裝2.2 Kodcloud網頁測試 3. cpolar內網穿透的安裝和注冊4. 本地網頁發布4.1 Cpolar云端設置4.2 Cpolar本地設置 5. 公網訪問測試6.結語 1.前言 本文主要為大家介紹一款國人自研的在線Web文件管理器可道云&#xff0c;…

唐劉:當 SaaS 愛上 TiDB(一)- 行業挑戰與 TiDB 的應對之道

導讀 在 TiDB 8.1 發布后&#xff0c;TiDB 展現了強大的支持 SaaS 業務的能力&#xff0c;成為 SaaS 業務數據庫的優先選擇之一。 本文為“當 SaaS 愛上 TiDB”系列文章的第一篇&#xff0c;系列文章將從技術原理和真實用戶體驗兩個角度深入探討 TiDB 在 SaaS 業務中的表現&a…

qt gridlayout 應用舉例

Qt的GridLayout是一種非常有用的布局管理器&#xff0c;它允許你在一個網格中放置控件&#xff0c;這樣你就可以創建出結構清晰、布局整齊的用戶界面。下面是一個使用GridLayout的簡單例子&#xff0c;展示了如何在一個窗口中放置幾個按鈕。 #include <QApplication> …

太速科技-3U VPX飛騰處理器刀片計算機

3U VPX飛騰處理器刀片計算機 一 、產品概述 該產品是一款基于國產飛騰FT2000 4核或騰銳D2000 8核的高性能3U VPX刀片式計算機。產品提供了4個x4 PCIe 3.0總線接口&#xff0c;同時可配置為1個x16或2個x8 PCIe3.0接口&#xff0c;因此具有很強的擴展性&#xff0c;極大…

agents 分類

一、分類 自動agent、半自動agent、領域、自定義sop和支持人為干預的agent。 先潑個冷水&#xff0c;目前這些agent項目都是實驗品&#xff0c;發展還沒有做知識庫問答相關開源項目那么成熟&#xff0c; 二、全自動agent autoGPT、loopGPT、babyAGI 全自動agent就是人類不可…

sizeof()

一、題目 *struct T { char a; int *d; int b; int c:16; double e; }; T *p; 在64位系統以及64位編譯器下&#xff0c;以下描述正確的是 A: sizeof 24 B: sizeof(p) 24 C: sizeof(p->a) 1 D: sizeof(p->e) 4 二、解析 p是一個指針&#xff0c;指針在32位機器上是…

GEE數據集——全球Ookla 5G 基站地圖數據(Ookla 5G Map Data)

Ookla 5G Map Data Ookla 5G 地圖數據 Ookla 5G Map? 于 2019 年 5 月推出,旨在全面展示 5G 技術在全球的擴展情況。在推出之初,該地圖突出顯示了 17 個國家的 300 項部署,說明了這一變革性技術的初步推廣情況。隨著時間的推移,該地圖已大幅增長,現在包含了來自 142 個…

實例演示Kafka-Stream消息流式處理流程及原理

以下結合案例&#xff1a;統計消息中單詞出現次數&#xff0c;來測試并說明kafka消息流式處理的執行流程 Maven依賴 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

Java中的LinkedList(鏈表)(如果想知道Java中有關LinkedList的知識點,那么只看這一篇就足夠了!)

前言&#xff1a;在Java編程語言中&#xff0c;Java集合框架提供了一組豐富的數據結構&#xff0c;以滿足各種應用需求。其中&#xff0c;LinkedList作為一種常用的數據結構&#xff0c;具有獨特的優勢和廣泛的應用場景。 ???這里是秋刀魚不做夢的BLOG ???想要了解更多內…

linux radix-tree 基數樹實現詳解

radix tree&#xff0c;又稱做基數樹&#xff0c;是一種適合于構建key(index)與value(item)相關聯的數據結構。內核中使用非常廣泛。本文主要聚焦linux內核基數樹的代碼實現,大量注釋過的代碼。 radix-tree組織結構如下: 1、數據結構 /** The bottom two bits of the slot de…

如何通過JSON-RPC向以太坊鏈發送簽名交易數據?

概述 在以太坊開發當中,通過web3.js、ethers.js等提供的API方法,都可以完成與以太坊的轉賬交易。那么如何通過以太坊JSON-RPC與以太坊進行交易呢? 在以太坊的JSON-RPC當中,有eth_sendRawTransaction這個方法,可以向以太坊網絡提交預簽名的交易廣播。 curl https://main…

IDEA阿里云OSS實現文件上傳·解決蒼穹外賣圖片回顯

簡單交代配置阿里云OSS的思路 1. 首先去阿里云開通一個OSS服務&#xff0c;配置好一個自己的Bucket 2. 在IDEA配置Bucket 3. 拷貝官網的OSS工具類代碼 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSS…

同三維T80001編碼器(帶屏)系列視頻使用操作說明書:高清HDMI編碼器,高清SDI編碼器,4K超清HDMI編碼器,雙路4K超高清編碼器

同三維T80001編碼器&#xff08;帶屏&#xff09;系列視頻使用操作說明書&#xff1a;高清HDMI編碼器&#xff0c;高清SDI編碼器&#xff0c;4K超清HDMI編碼器&#xff0c;雙路4K超高清編碼器 同三維T80001編碼器&#xff08;帶屏&#xff09;系列視頻使用操作說明書&#xff1…

【C語言】printf、fprintf、sprintf,scanf、fscanf、sscanf的區別

目錄 前言 printf、fprintf、sprintf printf fprintf sprintf scanf、fscanf、sscanf scanf fscanf sscanf 前言 這幾個函數曾出現在面試中&#xff0c;因為函數名都差不多&#xff0c;所以很讓人迷惑啊~ 下面我們逐個分析。 printf、fprintf、sprintf 這三個函數的主…

子任務:IT運維的精細化管理之道

在當今的企業運營中&#xff0c;信息技術已成為支撐業務發展的核心力量。根據Gartner的報告&#xff0c;IT服務管理&#xff08;ITSM&#xff09;的有效實施可以顯著提升企業的運營效率&#xff0c;降低成本高達15%&#xff0c;同時提高服務交付速度和質量。隨著業務的復雜性和…

電腦工具箱神器——uTools

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/ 很多人腦子里都有一些一個月只用兩三次的軟件&#xff0c;這些軟件就這樣積滿了灰塵&#xff0c;需要的時候又不知道去哪里找。uTools 完美地解決…

筆記:在Entity Framework Core 中,常用Attribute有哪些

一、目的&#xff1a; Entity Framework Core (EF Core) 支持使用屬性&#xff08;Attributes&#xff09;來配置模型和映射數據庫。這些屬性提供了一種聲明性的方式來指定如何將類和屬性映射到數據庫表和列。以下是一些EF Core中常用的屬性&#xff1a; 二、實現 1. [Table] …

力扣題解(環繞字符串中唯一的子字符串)

467. 環繞字符串中唯一的子字符串 定義字符串 base 為一個 "abcdefghijklmnopqrstuvwxyz" 無限環繞的字符串&#xff0c;所以 base 看起來是這樣的&#xff1a; "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 給你一個字符串 s …

深入理解 MyBatis 的 SqlSession:MyBatis 核心接口全解析

MyBatis 是一個非常流行的 Java 持久層框架&#xff0c;它簡化了數據庫操作&#xff0c;并且提供了強大的映射特性。在 MyBatis 中&#xff0c;SqlSession 是與數據庫交互的核心接口。本文將詳細介紹 SqlSession 的功能和使用方法。 什么是 SqlSession&#xff1f; SqlSessio…

MYSQL審批流程判斷同一層級審批人是否全部通過審批

在做流程審批的時候&#xff0c;通常會出現某一層有多個審批人的情況&#xff0c;這個時候需要所有人都通過才會進入到下一步 數據結構如下圖表格所示 每一個審批申請對應一個apply_id serial_no相同的代表是同一層級審批人 approval_status是審核狀態 下面我們可以用一個SQL來…