第1章 Spring Security架构概览 1- ?" m! |6 A% b2 Y; U4 F
1.1 Spring Security简介 1
. M7 K1 ^9 Q3 y1 v0 M- [1.2 Spring Security核心功能 2# c' s: H1 k! v; E3 b' l
1.2.1 认证 3! k' v7 P" [" R. `
1.2.2 授权 30 d I% _5 h, \3 ?: T# K1 { W/ l
1.2.3 其他 3
) [7 c, u1 h0 s$ J1.3 Spring Security整体架构 4/ ]; [& C7 c/ ]1 A7 q3 [
1.3.1 认证和授权 4
6 l0 X* g1 W; ~8 W5 N( n" [: y1.3.2 Web安全 6
5 ?1 z% x' K# t, ?1.3.3 登录数据保存 9
3 H/ w; j/ L. ^+ z+ X) N0 ?1.4 小结 90 Z6 S7 [, a) u9 T
第2章 Spring Security认证 10
! f& {$ S( F% S8 s: ^2.1 Spring Security基本认证 10
, u; V* [! l* A6 P2.1.1 快速入门 109 J% G4 p" A" V& L
2.1.2 流程分析 11! I2 I5 z$ I$ w7 q/ l- l, d
2.1.3 原理分析 12. Y. K4 K* Z) R, L7 [
2.2 登录表单配置 19' |5 L6 ]0 k b$ `% r5 w3 O! J
2.2.1 快速入门 19
: s: u4 F; l# u [( @9 v5 G: m; K2.2.2 配置细节 23
, b' K. K" q, o2.3 登录用户数据获取 39
6 J% l b8 J s" r. i; X2.3.1 从SecurityContextHolder中获取 41
! i5 V& ]$ a3 ]' C2.3.2 从当前请求对象中获取 59$ g9 x) _5 ]: f& X6 o' R
2.4 用户定义 64
0 I6 p7 f; }; z) t4 X2 D; o& p: i2.4.1 基于内存 649 L0 r ~4 A) x# z
2.4.2 基于JdbcUserDetailsManager 65
0 ~7 a# D6 p; _+ G( E2.4.3 基于MyBatis 68
0 t/ n; D) }7 ~. h5 T; ` U2.4.4 基于Spring Data JPA 74. J1 [9 z3 r, |- ~& q
2.5 小结 77/ L& F2 M* [9 h* w* Z. n
第3章 认证流程分析 78
: r. ~2 S& a7 T) N6 J0 G3.1 登录流程分析 78
2 @/ V, `% G! {3 Y3.1.1 AuthenticationManager 788 ^/ s& N) Z1 ]" n; f3 t0 M
3.1.2 AuthenticationProvider 79
2 t& _5 O# C; N8 v2 F7 J3.1.3 ProviderManager 86
9 ]2 I5 y3 T$ `3.1.4 AbstractAuthenticationProcessingFilter 89
3 O4 T/ C% i3 l Q! ^3.2 配置多个数据源 94
' F7 `! v+ C6 K% t/ c' v3.3 添加登录验证码 953 A- B( M! N* w/ q8 ?
3.4 小结 99) {# b) |! T6 s# F
第4章 过滤器链分析 100
9 r# F8 S* w( J; F8 D; d1 O$ P" H; A4.1 初始化流程分析 100" O. G5 F$ m8 y/ b; Y6 E1 ^
4.1.1 ObjectPostProcessor 101" R x$ S! w S& H
4.1.2 SecurityFilterChain 102
6 a9 Z6 n/ t4 e' t1 h3 J& ^$ n% z# w4.1.3 SecurityBuilder 103
: J/ G( z2 I7 w P7 N$ H4.1.4 FilterChainProxy 117
! F( [' K# H I+ e' Q7 R' Y. X4.1.5 SecurityConfigurer 120
( z1 n6 a( R* h4.1.6 初始化流程分析 128* P* ?( c. j! J/ s; _( ?) c
4.2 ObjectPostProcessor使用 136
9 v2 m+ F2 W$ X2 W& z4.3 多种用户定义方式 137
. B2 p0 R+ m* P* M5 b* `% B4.4 定义多个过滤器链 141, Q9 L. N9 O9 F# F7 d% Z; h
4.5 静态资源过滤 144
! z6 K7 \9 p5 y$ P4.6 使用JSON格式登录 146
/ e3 f% ~5 r7 ~+ f$ m% N4.7 添加登录验证码 150
8 j2 n ?4 O |3 B) d5 ?4.8 小结 152% t. W% V5 ~2 ^0 y
第5章 密码加密 153
# y6 h1 s: e% ]: ^5.1 密码为什么要加密 153
w# J( c; ]. y- V5.2 密码加密方案进化史 154( R$ ^/ m. u+ I# E: o
5.3 PasswordEncoder详解 154/ w+ s1 C) x/ x( ?6 E0 T
5.3.1 PasswordEncoder常见实现类 155
! ?0 b. J% Q- S5 L) Y' S5.3.2 DelegatingPasswordEncoder 156
3 t5 @5 Y% M3 T! p" t ~4 V# g; O( t5.4 实战 159
" U: p& C# u7 @2 m2 k' k5.5 加密方案自动升级 161* X0 R& P2 N/ @, {
5.6 是谁的PasswordEncoder 1669 B6 |& H1 q" Q9 H: W- ~
5.7 小结 168
5 D' j {5 z. x+ V' Z第6章 RememberMe 169
# e4 |# e7 S( W# h6.1 RememberMe简介 169
4 i" v( V' W/ E0 O6.2 RememberMe基本用法 170
! Z& A+ W, C) r6 A$ ~/ j( T6.3 持久化令牌 1721 `5 h% ]' @( G) z
6.4 二次校验 174
; N, \" l# Y! {7 H6.5 原理分析 176: [0 a5 j/ y. L. F
6.6 小结 1899 U" H. Y! ^/ W0 n
第7章 会话管理 190
. E6 Z$ P* k9 t$ S4 ]8 C7.1 会话简介 190+ v' E- P: C) ]. k; }0 f
7.2 会话并发管理 191
! U/ j5 d% X, Z) h7.2.1 实战 191
- o, Q. ]5 V% m9 J! x# H+ r0 k! M4 z7.2.2 原理分析 194 [! E2 V/ ^: Y5 ?* r Q
7.3 会话固定攻击与防御 206' Q- C9 N) D g
7.3.1 什么是会话固定攻击 206) `$ z# Y' c2 j" V. H
7.3.2 会话固定攻击防御策略 207
4 }4 _, u/ g% n) M: i. g7.4 Session共享 208" i% \3 Z6 O& r7 t0 i
7.4.1 集群会话方案 208
) N% D7 [, t! c7.4.2 实战 210
* j! \: b* G" r) P7 P8 t* h7.5 小结 212
2 o$ R. ~4 G/ F, `) X8 M2 w% b! j" u: o第8章 HttpFirewall 213
, @/ U9 d3 a( S8.1 HttpFirewall简介 213% ^5 x% i5 d0 B+ L. b
8.2 HttpFirewall严格模式 215
2 j9 r, b# p" ?9 H1 k8.2.1 rejectForbiddenHttpMethod 216
: |$ Q5 y# M% l, G/ t4 ~" [7 [( z8.2.2 rejectedBlacklistedUrls 217
( _" ~" j9 j0 r6 c( [& W c8.2.3 rejectedUntrustedHosts 218
1 G g! Q, J6 @1 K N8.2.4 isNormalized 219
2 t4 f- `, H1 A4 Z5 E8.2.5 containsOnlyPrintableAsciiCharacters 220
7 \" _1 S$ i3 I. H8.3 HttpFirewall普通模式 220
, K+ p; B& i* v% G8.4 小结 221
( r; E- w ]+ q2 n4 o6 G' e4 e第9章 漏洞保护 222
8 F) z# }7 q& s8 e9.1 CSRF攻击与防御 222
' z" A% v# {0 y1 G0 r3 u9.1.1 CSRF简介 222
; e7 ?1 _) |5 t1 \, V* E9.1.2 CSRF攻击演示 223. ~# b# _. ^! S6 K2 R, Q: V x
9.1.3 CSRF防御 2249 F7 [: X7 ~2 D4 `
9.1.4 源码分析 231, H/ }0 y5 p% ]. u O' l
9.2 HTTP响应头处理 237, H7 A1 h" x" a& L t
9.2.1 缓存控制 239
4 B' u9 e' V- \* n4 ~9.2.2 X-Content-Type-Options 240! e" F, m2 e2 ]- I5 @
9.2.3 Strict-Transport-Security 2414 Z; U. ?9 D4 S2 i4 [8 L" W
9.2.4 X-Frame-Options 244
/ d% X" H& J' M0 s, O7 _9.2.5 X-XSS-Protection 2456 |5 x) M3 N; C9 p j+ S
9.2.6 Content-Security-Policy 246
1 K- X) o* B& G9.2.7 Referrer-Policy 248- v; A. t% a$ F! e
9.2.8 Feature-Policy 249
9 L5 L. F2 {1 @. B. a1 w: D9.2.9 Clear-Site-Data 249
5 F2 A/ r a6 \0 u1 M7 b9.3 HTTP通信安全 250
( V7 c% @: @$ ]1 _1 Q# ]9.3.1 使用HTTPS 250" D5 i: w! A1 T+ @* D( ], j
9.3.2 代理服务器配置 2530 n7 c! h1 p# [3 i/ f' D
9.4 小结 254
: @ ~4 m$ j) t; i. q ]# k! R第10章 HTTP认证 255& Z( V; [* s3 k4 ^) E
10.1 HTTP Basic authentication 255
2 G; R% H* W5 ~8 M- c- Z5 X& N10.1.1 简介 255" U; n- s7 p' O4 I/ o
10.1.2 具体用法 257
7 h4 f/ t( L( f+ q' D10.1.3 源码分析 2576 z4 u$ c2 m$ `) v( Z1 K
10.2 HTTP Digest authentication 260/ n8 V9 ?# o8 Z' e0 u
10.2.1 简介 260
: t, j% H2 t7 F5 q* [10.2.2 具体用法 261
' r6 g) `4 Z' e3 w- d10.2.3 源码分析 263
$ v# N6 V) j& V* z" A10.3 小结 2684 e. X* n- [$ {% t9 S8 Q
第11章 跨域问题 269' n0 \$ S' j1 I6 d
11.1 什么是CORS 269
1 j% Y# n$ l2 _$ t! }9 b3 b3 d11.2 Spring处理方案 2704 S8 b& L5 [* J3 L( z
11.2.1 @CrossOrigin 271) z: ]8 F' V1 G {# S% ^, B
11.2.2 addCorsMappings 272/ D/ z( i" U' E0 @
11.2.3 CorsFilter 273
- a# c9 b; h. Y3 M1 Z11.3 Spring Security处理方案 274; B+ G* c) h5 |# n
11.3.1 特殊处理OPTIONS请求 2757 B7 I/ e, y# V' b9 U$ G) p
11.3.2 继续使用CorsFilter 275
& o5 l! o9 G6 f7 }11.3.3 专业解决方案 276: {) n9 J! d6 p# ~& }
11.4 小结 2797 m" |* M6 r* V0 S6 \" z
第12章 异常处理 280
8 @0 m! b d- v0 G3 [ c12.1 Spring Security异常体系 280
2 W8 y( x G$ {% u$ ~12.2 ExceptionTranslationFilter原理分析 281
9 ~9 I* g# Q {8 ~; y( C( ]12.3 自定义异常配置 287. D M" X" g9 _- N4 e( Q6 C- {
12.4 小结 290
% d! O% O6 c$ a# e8 n; s第13章 权限管理 2913 Y* K: ], m* P2 f# G
13.1 什么是权限管理 291
7 f- z3 L2 q& y+ h13.2 Spring Security权限管理策略 292
; _/ w& }" ]1 Z. ~' z; O13.3 核心概念 292
( w# t4 w9 p2 k9 G! S13.3.1 角色与权限 292
$ }, ?4 G/ Q8 g% n13.3.2 角色继承 294
# u0 z9 }% f8 {1 i13.3.3 两种处理器 295) C9 Z6 q) N- l) v' V
13.3.4 前置处理器 296
y6 o/ i x7 D& h2 z1 P& Q13.3.5 后置处理器 299
9 x2 ]: K- L0 n- A/ C$ X3 S13.3.6 权限元数据 300& d9 F# j0 S$ c3 [+ }! ^
13.3.7 权限表达式 303
; N1 _$ V) L( z0 N9 O p13.4 基于URL地址的权限管理 305
9 ~ J" M) C! O. F+ N13.4.1 基本用法 306# m- D8 t$ o; s3 B- A+ x' Z5 v
13.4.2 角色继承 308
1 K1 I9 W& p6 `0 \# [9 d( E13.4.3 自定义表达式 309* N/ F) H. V& H
13.4.4 原理剖析 310* S5 y( o; {/ S7 r
13.4.5 动态管理权限规则 316
. s# U9 V( `1 T13.5 基于方法的权限管理 325, `$ o& d2 }. A
13.5.1 注解介绍 325( Q1 ~2 g! M* B( O/ V' g; p
13.5.2 基本用法 326
# R) R T! D+ Z8 k13.5.3 原理剖析 331# y- ^! O. h: @1 K, x: u
13.6 小结 338: c* g' \. l) Y, b
第14章 权限模型 339/ y& c' t4 T9 D0 D- }
14.1 常见的权限模型 339
5 K: `) X9 V" v$ {5 F+ N14.2 ACL 340
. f' h" q' Q4 W$ x2 }/ f, N3 }- t14.2.1 ACL权限模型介绍 3407 M4 Z8 i! w/ Y0 h/ d q, w8 B. Y
14.2.2 ACL核心概念介绍 341
% w! L! {! |$ A7 a14.2.3 ACL数据库分析 343
" |5 j+ ]( y9 u: p: d; X4 y7 W14.2.4 实战 345; d9 J+ c8 J7 o- ]' {" z
14.3 RBAC 354
% \$ l0 ~; B# E3 @* [9 T14.3.1 RBAC权限模型介绍 3548 l. ~# Z7 B! f6 A
14.3.2 RBAC权限模型分类 355# G- d. c1 k# c7 [4 K3 G( @% @# L& f
14.3.3 RBAC小结 3570 j- Y# Z- o5 n( L R
14.4 小结 357; N0 R8 R0 n& R
第15章 OAuth2 358
+ @" E( p7 n8 C. L0 J15.1 OAuth2简介 358; E& @' @& t" J, M" b
15.2 OAuth2四种授权模式 359 I& C& y5 g s$ {2 v: j" L) b
15.2.1 授权码模式 360
7 q: k9 J# g0 Q* e/ T15.2.2 简化模式 361
* Z2 Y. A5 H t4 w" z. b15.2.3 密码模式 3630 p9 Q" p8 Y' [. O: }9 V# ?
15.2.4 客户端模式 363/ {3 J' R2 m8 R8 `
15.3 Spring Security OAuth2 364
( N3 O/ p1 ^ O3 f X8 v# f o15.4 GitHub授权登录 365( G: ]7 z+ o6 o# q8 M
15.4.1 准备工作 365
7 P# r, V& j$ m% h! x8 E15.4.2 项目开发 367
. y7 K% m1 x2 m7 l/ T3 g15.4.3 测试 368' o7 F3 S2 m+ m U7 ?8 B
15.4.4 原理分析 369
$ l2 x E& h+ [4 |15.4.5 自定义配置 375
2 j- w5 l& B0 r2 v' T& R15.5 授权服务器与资源服务器 379
; X7 L L' b* V% l15.5.1 项目规划 379 java8.com9 o( `- x1 p; }- X
15.5.2 项目搭建 380
4 B5 L7 I( l: }9 @* B15.5.3 测试 3913 `' ?5 I. ?; ^* O+ C
15.5.4 原理分析 393
1 n$ r/ A3 G: W/ B4 r$ b e/ s15.5.5 自定义请求 396- j3 X: W7 g1 I. s" S8 H
15.6 使用Redis 397; b! T* k0 W. D8 Y2 R4 G; J
15.7 客户端信息存入数据库 399
6 n5 R7 L9 f$ P+ q15.8 使用JWT 401! q$ D9 F$ L, ]1 H6 e# |: L) D
15.8.1 JWT 4019 d' S5 k# K9 B- s
15.8.2 JWT数据格式 402
; q p1 _. n# y" M15.8.3 OAuth2中使用JWT 403# o+ P, {6 I0 e2 x) r" U- t# h
15.9 小结 4068 y1 G2 R& _% o1 M4 j, m( X