深入淺出 Spring Security
內容描述
Spring Security是Java企業級開發中常用的安全管理框架,也能完美支持OAuth2。同時,Spring Security作為Spring家族的一員,與Spring Boot、Spring Cloud等框架整合使用也非常方便。 本書分為15章,講解Spring Security框架、認證、認證流程分析、過濾器鏈分析、密碼加密、RememberMe、會話管理、HttpFirewall、漏洞保護、HTTP認證、跨域問題、異常處理、權限管理、權限模型、OAuth2等內容。本書致力於讓讀者在學會Spring Security用法的同時,也能通過閱讀源碼來理解它的實現原理。 本書適合具有Spring Boot基礎的讀者、Java企業應用開發工程師,也適合作為高等院校和培訓機構電腦相關專業師生的教學參考書。
目錄大綱
目 錄
第1章 Spring Security架構概覽 1
1.1 Spring Security簡介 1
1.2 Spring Security核心功能 2
1.2.1 認證 3
1.2.2 授權 3
1.2.3 其他 3
1.3 Spring Security整體架構 4
1.3.1 認證和授權 4
1.3.2 Web安全 6
1.3.3 登錄數據保存 9
1.4 小結 9
第2章 Spring Security認證 10
2.1 Spring Security基本認證 10
2.1.1 快速入門 10
2.1.2 流程分析 11
2.1.3 原理分析 12
2.2 登錄表單配置 19
2.2.1 快速入門 19
2.2.2 配置細節 23
2.3 登錄用戶數據獲取 39
2.3.1 從SecurityContextHolder中獲取 41
2.3.2 從當前請求對象中獲取 59
2.4 用戶定義 64
2.4.1 基於內存 64
2.4.2 基於JdbcUserDetailsManager 65
2.4.3 基於MyBatis 68
2.4.4 基於Spring Data JPA 74
2.5 小結 77
第3章 認證流程分析 78
3.1 登錄流程分析 78
3.1.1 AuthenticationManager 78
3.1.2 AuthenticationProvider 79
3.1.3 ProviderManager 86
3.1.4 AbstractAuthenticationProcessingFilter 89
3.2 配置多個數據源 94
3.3 添加登錄驗證碼 95
3.4 小結 99
第4章 過濾器鏈分析 100
4.1 初始化流程分析 100
4.1.1 ObjectPostProcessor 101
4.1.2 SecurityFilterChain 102
4.1.3 SecurityBuilder 103
4.1.4 FilterChainProxy 117
4.1.5 SecurityConfigurer 120
4.1.6 初始化流程分析 128
4.2 ObjectPostProcessor使用 136
4.3 多種用戶定義方式 137
4.4 定義多個過濾器鏈 141
4.5 靜態資源過濾 144
4.6 使用JSON格式登錄 146
4.7 添加登錄驗證碼 150
4.8 小結 152
第5章 密碼加密 153
5.1 密碼為什麽要加密 153
5.2 密碼加密方案進化史 154
5.3 PasswordEncoder詳解 154
5.3.1 PasswordEncoder常見實現類 155
5.3.2 DelegatingPasswordEncoder 156
5.4 實戰 159
5.5 加密方案自動升級 161
5.6 是誰的PasswordEncoder 166
5.7 小結 168
第6章 RememberMe 169
6.1 RememberMe簡介 169
6.2 RememberMe基本用法 170
6.3 持久化令牌 172
6.4 二次校驗 174
6.5 原理分析 176
6.6 小結 189
第7章 會話管理 190
7.1 會話簡介 190
7.2 會話並發管理 191
7.2.1 實戰 191
7.2.2 原理分析 194
7.3 會話固定攻擊與防禦 206
7.3.1 什麽是會話固定攻擊 206
7.3.2 會話固定攻擊防禦策略 207
7.4 Session共享 208
7.4.1 集群會話方案 208
7.4.2 實戰 210
7.5 小結 212
第8章 HttpFirewall 213
8.1 HttpFirewall簡介 213
8.2 HttpFirewall嚴格模式 215
8.2.1 rejectForbiddenHttpMethod 216
8.2.2 rejectedBlacklistedUrls 217
8.2.3 rejectedUntrustedHosts 218
8.2.4 isNormalized 219
8.2.5 containsOnlyPrintableAsciiCharacters 220
8.3 HttpFirewall普通模式 220
8.4 小結 221
第9章 漏洞保護 222
9.1 CSRF攻擊與防禦 222
9.1.1 CSRF簡介 222
9.1.2 CSRF攻擊演示 223
9.1.3 CSRF防禦 224
9.1.4 源碼分析 231
9.2 HTTP響應頭處理 237
9.2.1 緩存控制 239
9.2.2 X-Content-Type-Options 240
9.2.3 Strict-Transport-Security 241
9.2.4 X-Frame-Options 244
9.2.5 X-XSS-Protection 245
9.2.6 Content-Security-Policy 246
9.2.7 Referrer-Policy 248
9.2.8 Feature-Policy 249
9.2.9 Clear-Site-Data 249
9.3 HTTP通信安全 250
9.3.1 使用HTTPS 250
9.3.2 代理服務器配置 253
9.4 小結 254
第10章 HTTP認證 255
10.1 HTTP Basic authentication 255
10.1.1 簡介 255
10.1.2 具體用法 257
10.1.3 源碼分析 257
10.2 HTTP Digest authentication 260
10.2.1 簡介 260
10.2.2 具體用法 261
10.2.3 源碼分析 263
10.3 小結 268
第11章 跨域問題 269
11.1 什麽是CORS 269
11.2 Spring處理方案 270
11.2.1 @CrossOrigin 271
11.2.2 addCorsMappings 272
11.2.3 CorsFilter 273
11.3 Spring Security處理方案 274
11.3.1 特殊處理OPTIONS請求 275
11.3.2 繼續使用CorsFilter 275
11.3.3 專業解決方案 276
11.4 小結 279
第12章 異常處理 280
12.1 Spring Security異常體系 280
12.2 ExceptionTranslationFilter原理分析 281
12.3 自定義異常配置 287
12.4 小結 290
第13章 權限管理 291
13.1 什麽是權限管理 291
13.2 Spring Security權限管理策略 292
13.3 核心概念 292
13.3.1 角色與權限 292
13.3.2 角色繼承 294
13.3.3 兩種處理器 295
13.3.4 前置處理器 296
13.3.5 後置處理器 299
13.3.6 權限元數據 300
13.3.7 權限表達式 303
13.4 基於URL地址的權限管理 305
13.4.1 基本用法 301
13.4.2 角色繼承 308
13.4.3 自定義表達式 309
13.4.4 原理剖析 310
13.4.5 動態管理權限規則 316
13.5 基於方法的權限管理 325
13.5.1 註解介紹 325
13.5.2 基本用法 326
13.5.3 原理剖析 331
13.6 小結 338
第14章 權限模型 339
14.1 常見的權限模型 339
14.2 ACL 340
14.2.1 ACL權限模型介紹 340
14.2.2 ACL核心概念介紹 341
14.2.3 ACL數據庫分析 343
14.2.4 實戰 345
14.3 RBAC 354
14.3.1 RBAC權限模型介紹 354
14.3.2 RBAC權限模型分類 355
14.3.3 RBAC小結 357
14.4 小結 357
第15章 OAuth2 358
15.1 OAuth2簡介 358
15.2 OAuth2四種授權模式 359
15.2.1 授權碼模式 360
15.2.2 簡化模式 361
15.2.3 密碼模式 363
15.2.4 客戶端模式 363
15.3 Spring Security OAuth2 364
15.4 GitHub授權登錄 365
15.4.1 準備工作 365
15.4.2 項目開發 367
15.4.3 測試 368
15.4.4 原理分析 369
15.4.5 自定義配置 375
15.5 授權服務器與資源服務器 379
15.5.1 項目規劃 379
15.5.2 項目搭建 380
15.5.3 測試 391
15.5.4 原理分析 393
15.5.5 自定義請求 396
15.6 使用Redis 397
15.7 客戶端信息存入數據庫 399
15.8 使用JWT 401
15.8.1 JWT 401
15.8.2 JWT數據格式 402
15.8.3 OAuth2中使用JWT 403
15.9 小結 406
作者介紹
王松,軟件開發工程師,擅長JavaEE開發,對Spring Boot、Spring Cloud微服務等技術有深入的研究。著有暢銷書《Spring Boot+Vue全棧開發實戰》。