SpringSecurity是什么?

Spring Security是Spring生態中的安全框架,用于管理Web應用的認證與權限控制,支持多種登錄方式并集成防護機制,可防范CSRF/XSS等攻擊,保障企業級系統的安全性。

一、核心功能與定位

  1. 身份認證(Authentication) 驗證用戶身份,支持多種認證方式:

    • 表單登錄:傳統用戶名/密碼登錄。

    • OAuth2/JWT:適用于前后端分離或第三方登錄場景。

    • LDAP/HTTP Basic:集成企業目錄服務或簡單 API 認證。

  2. 授權(Authorization) 控制用戶訪問資源的權限:

    • 基于角色(Role):如ADMIN、USER等粗粒度控制。

    • 基于權限(Authority):細粒度控制(如read、write)。

    • 方法級安全:通過@PreAuthorize注解動態校驗權限。

  3. 攻擊防護 內置防御常見 Web 攻擊:

    • CSRF(跨站請求偽造):自動生成并驗證 Token

    • 會話固定攻擊:用戶登錄后重置 Session ID。

    • 安全響應頭:自動添加X-Content-Type-Options等防護頭。

二、架構與核心設計

  1. 過濾器鏈(Filter Chain)

    • 通過DelegatingFilterProxy攔截 HTTP 請求,由一系列安全過濾器(如UsernamePasswordAuthenticationFilter)處理認證、授權等邏輯。

    • 典型流程:請求 → 認證過濾器 → 授權校驗 → 資源訪問。

  2. 核心組件

    • SecurityContextHolder:存儲當前用戶的安全上下文(如認證信息)。

    • UserDetailsService:加載用戶數據(如從數據庫或內存),返回UserDetails象。

    • AuthenticationManager:協調認證流程,委托給DaoAuthenticationProvider等實現。

三、關鍵優勢

  1. 深度集成 Spring 生態

    • 無縫兼容 Spring Boot、Spring MVC,支持自動配置(如默認啟用基礎安全規則)。

    • 通過@EnableWebSecurity快速啟用安全模塊。

  2. 模塊化與可擴展性

    • 支持按需擴展認證方式(如自定義UserDetailsService)。

    • 提供 Servlet 應用(spring-security-web)和 Reactive 應用(spring-security-reactive)獨立模塊。

  3. 企業級安全實踐

    • 遵循 縱深防御(Defense in Depth)原則,從網絡層到數據層多層防護。

    • 支持 密碼加密(BCrypt/SCrypt)、HTTPS 強制、會話并發控制等。

四、典型應用場景

場景技術方案示例
傳統 Web 應用表單登錄 + 會話管理后臺管理系統,基于角色控制菜單權限。
前后端分離架構JWT/OAuth2 + 無狀態配置RESTful API 使用 JWT 令牌認證,禁用 Session。
微服務安全Spring Cloud Security + OAuth2 授權服務器微服務間通過令牌中繼(Token Relay)傳遞身份。

五、與 Shiro 的對比

特性Spring SecurityApache Shiro
集成 Spring? 深度無縫集成?? 需手動適配
功能范圍認證、授權、攻擊防護、會話管理全覆蓋側重認證和授權,防護能力較弱
學習曲線較陡峭(配置復雜)更簡單易用
適用規模中大型企業級項目中小型項目

六、典型案例展示

1.基礎Web應用安全(單體架構)
  1. 表單登錄+URL權限控制

    • 場景:傳統后臺管理系統(如OA系統)

    • 核心配置

      @Configuration
      @EnableWebSecurity
      public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/home").permitAll() ?// 公開路徑.antMatchers("/admin/**").hasRole("ADMIN") ?// 管理員權限.anyRequest().authenticated() ?// 其他路徑需登錄.and().formLogin() ?// 啟用表單登錄.loginPage("/login") ?// 自定義登錄頁.permitAll();}
      }
    • 特點:

      • 默認生成登錄頁,支持自定義UI(Thymeleaf模板)

      • 內存用戶認證(auth.inMemoryAuthentication())或數據庫用戶認證擴展

  2. 前后端分離架構(RESTful API安全)

    1. JWT無狀態認證

      • 場景:移動端/前端調用API接口

      • 實現流程:

關鍵代碼:

// JWT過濾器
public class JwtFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {String token = request.getHeader("Authorization");if (token != null) {Authentication auth = jwtUtil.parseToken(token); ?// 解析TokenSecurityContextHolder.getContext().setAuthentication(auth); ?// 注入安全上下文}chain.doFilter(request, response);}
}
  • 配置要點:

    • 禁用Session(http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)

    • 開放登錄接口(.antMatchers("/auth/login").permitAll())

  1. 方法級注解控制

    • 使用@PreAuthorize實現細粒度授權:

      @RestController
      public class UserController {@GetMapping("/api/user/{id}")@PreAuthorize("hasAuthority('READ_USER')") ?// 需READ_USER權限public User getUser(@PathVariable Long id) { ... }
      }
  2. 微服務安全(OAuth2 + JWT)
    1. OAuth2授權服務器

      • 場景:多服務統一認證(如電商系統)

      • 架構:

資源服務器配置

@EnableResourceServer
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/**").authenticated(); ?// 保護API路徑}
}
3.自定義認證與數據庫集成
  1. JDBC用戶認證服務

    • 場景:從數據庫動態加載用戶權限

    • 實現步驟:

      1. 創建用戶表(含username, password, roles字段)

      2. 實現UserDetailsService接口:

        @Service
        public class JdbcUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String username) {User user = userRepository.findByUsername(username);List<GrantedAuthority> authorities = user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).collect(Collectors.toList());return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);}
        }
      3. 配置密碼編碼器(推薦BCrypt):

        @Bean
        public PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();
        }

六、總結

Spring Security 是 Spring 應用安全的基石,通過 模塊化設計深度可定制性 滿足從單體應用到微服務的復雜需求。其核心價值在于:

  1. 標準化安全流程:提供認證、授權、防護的一站式解決方案;

  2. 企業級可靠性:內置最佳實踐(如 CSRF 防護、密碼加密);

  3. 生態整合優勢:與 Spring Boot、Spring Cloud 協同簡化配置。

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

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

相關文章

nt!IoSynchronousPageWrite函數分析之atapi!IdeReadWrite----非常重要

第一部分&#xff1a;預分析 1: kd> g Breakpoint 7 hit atapi!IdeReadWrite: f729cb2a 55 push ebp 1: kd> kc # 00 atapi!IdeReadWrite 01 atapi!IdeSendCommand 02 atapi!AtapiStartIo 03 atapi!IdeStartIoSynchronized 04 nt!KeSynchronizeExecuti…

軟考系統架構設計師經驗總結

本文目的 對參加的2025年上半年系統架構設計師考試進行總結提供一些備考思路給未來參加系統架構設計師的同學 個人背景 工作背景 本科計算機與技術&#xff08;學過一些計算機基礎課程&#xff09;&#xff0c;15年畢業后從事過b端&#xff08;人群畫像、營銷、用戶增長、硬…

Tailwind CSS工作原理

文章目錄 前言1. 指令解析與 AST 操作&#x1f6a9; **核心處理流程**&#x1f9e9; **具體流程說明** 2. **配置驅動的樣式生成**3. **JIT 模式&#xff08;Just-In-Time&#xff09;的核心邏輯**4. **插件與自定義擴展**5. **與 PostCSS 管道的協同**6. **優化與 Tree Shakin…

web網頁開發,在線%旅游景點管理%系統demo,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql

經驗心得 兩業務單&#xff0c;都是業務邏輯開發&#xff0c;基本crud&#xff0c;什么是前后端&#xff0c;怎么分離前后端&#xff0c;前后端怎么通訊的&#xff0c;是以什么格式進行通訊這些咱們都需要掌握&#xff0c;后面剩下就是前后端不同層如何優化。管理系統很常見了其…

面試150 長度最小的子數組

思路 聯想到滑動窗口法。左窗口的值為0&#xff0c;遍歷數組對數組求和&#xff0c;當數組的和大于等于target的時候&#xff0c;窗口要收縮&#xff0c;計算子數組的長度&#xff0c;并及時更新最小的長度&#xff0c;左窗口右移。 class Solution:def minSubArrayLen(self,…

Python字典的查詢操作

一、前言 在 Python 中&#xff0c;字典&#xff08;dict&#xff09; 是一種非常常用的數據結構&#xff0c;以鍵值對&#xff08;Key-Value Pair&#xff09;形式存儲數據&#xff0c;支持快速查找、插入和刪除操作。 本文將系統性地介紹 Python 字典中常見的查詢操作方法&…

pyhton基礎【18】面向對象基礎一

目錄 一.面向對象 二.面向對象概述 三.類與對象 一.面向對象 Python中的面向對象編程OOP是一種編程范式&#xff0c;它使用對象來設計軟件。對象是具有屬性(稱為屬性)和可以執行的操作(稱為方法)的數據結構。 基礎概念 類&#xff1a;class 類是創建對象的藍圖或模板。它…

Requests源碼分析:面試考察角度自驗(初級)

簡單描述執行流程 Q:能簡單描述一下發送一個requests.get(url)請求時,在requests庫內部的主要執行流程嗎?(從調用get方法到收到響應) 入口委托: get() 方法內部調用 requests.request(GET, url)。Session 接管: request() 方法會獲取或隱式創建一個 Session 對象,并調用…

鴻蒙5:條件-循環-列表渲染

注意&#xff1a;博主有個鴻蒙專欄&#xff0c;里面從上到下有關于鴻蒙next的教學文檔&#xff0c;大家感興趣可以學習下 如果大家覺得博主文章寫的好的話&#xff0c;可以點下關注&#xff0c;博主會一直更新鴻蒙next相關知識 專欄地址: https://blog.csdn.net/qq_56760790/…

淺談AI大模型-MCP

MCP簡介 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議 &#xff09;&#xff0c;24年11月初的時候Anthropic發了一篇技術博客&#xff0c;推出了他們的模型上下文協議MCP&#xff0c;介紹了一種規范&#xff1a;應用如何為LLM提供上下文。官網稱MCP為AI應…

MySQL數據庫基礎概述

前言&#xff1a; MySQL作為全球應用最廣泛的開源關系型數據庫管理系統&#xff08;RDBMS&#xff09;?&#xff0c;憑借其高性能、高可靠性與零成本特性&#xff0c;已成為Web應用、企業系統的核心數據引擎。它遵循SQL標準&#xff0c;通過表結構實現數據的結構化存儲&#x…

桌面小屏幕實戰課程:DesktopScreen 16 HTTP

飛書文檔http://https://x509p6c8to.feishu.cn/docx/doxcnrxBs55qGn6xoysTcJpqwRf /home/kemp/work/esp/esp-idf/examples/protocols/http_request 源碼下載方式參考&#xff1a; 源碼下載方式 心知天氣 注冊賬號&#xff0c;申請產品&#xff0c;獲取密鑰 產品 天氣數據 H…

vs2019 + QT下 vs2019創建的項目打開ui文件失敗

問題: 在vs2019 QT模式下。使用2019創建工程后。點擊ui文件打開時。出現奔潰&#xff0c;如下圖 解決方式&#xff1a; ui文件->右鍵->打開方式->添加->程序->點擊三個點->qcreator(qt安裝目錄) ->設置為默認值->確定 點擊設置為默認值&#xff0c;點…

WPS之PPT鏤空效果實現

1、準備一張圖片&#xff0c;剪切存入剪貼板 2、把圖片設為背景 右鍵 》 設置背景格式 》 圖片或紋理填充 》 圖片填充選擇剪貼板 3、插入一個矩形覆蓋全圖&#xff0c;設置無線條漸變填充從左到右 4、插入圓角矩形 5、單擊小黃點調整弧度 6、選擇無線條幻燈片背景填充 7、插…

服務注冊中心的本質抉擇:從業務本質看AP與CP的終極之選

本文從服務注冊中心的本質職責出發&#xff0c;通過分析其核心功能、業務場景和技術約束&#xff0c;深入探討服務注冊中心在架構設計上應該優先保證AP還是CP特性。文章首先剖析服務注冊中心的根本使命&#xff0c;然后從分布式系統原理、生產實踐案例和性能表現三個維度進行對…

mybatis-plus從入門到入土(一):快速開始

? 朋友們, 大家好, 從今天開始我想開一個系列博客。名字起的比較隨意就叫Mybatis-Plus從入門到入土, 這系列博客的定位是從基礎使用開始, 然后逐步深入全面的了解Mybatis-Plus框架, 寫這個博客的主要原因是工作中經常用到Mybatis-Plus框架, 因而對這個框架相對比較了解一些, 順…

如何快速將iPhone中的文本保存到電腦上

您的 iPhone 上是否有很多重要的短信&#xff0c;并且您想將短信備份到計算機上&#xff1f;我們都知道傳輸消息與傳輸照片不同&#xff0c;但幸運的是&#xff0c;您可以使用相關的工具和方法來實現。我們介紹了 4 種方法來解釋如何將 iPhone 中的文本保存到計算機。所有的辦法…

【OpenGL學習】(八)圖形變換

OpenGL圖形變換介紹&#xff1a;https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations 【OpenGL學習】&#xff08;八&#xff09;圖形變換 本項目將通過變換矩陣&#xff0c;對【OpenGL學習】&#xff08;七&#xff09;紋理單元 中的圖形進行縮放…

從理論到實戰:解密大型語言模型的核心技術與應用指南

一、Transformer&#xff1a;語言理解與生成的基石 Transformer 架構的出現&#xff0c;徹底改變了自然語言處理&#xff08;NLP&#xff09;的格局。它以“注意力”為核心&#xff0c;將全局依賴的捕捉效率推向新高。下面用 圖簡要概覽其數據流&#xff1a; 從上圖可見&#…

kali換源

在Kali Linux中切換軟件源可以提高軟件下載速度&#xff0c;下面為你介紹切換源的方法。 一、備份原配置文件 首先備份原配置文件&#xff0c;避免操作失誤導致問題&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak二、編輯源配置文件 使用以下命令編…