入 门 篇- f* `( i& C- ~ ?1 B
/ L2 x% c( N0 k) M
第1章 进入Spring Boot世界 2
O; l9 w+ q# n* ?1.1 认识Spring Boot 2
+ f- H4 b4 M% X+ P( d1 {5 ^1.1.1 什么是Spring Boot 2
/ g/ u! O% {' {1 P/ {1.1.2 Spring、Spring Boot、Spring Cloud的关系 4
6 W& f+ W& C5 o# k2 O1.1.3 Spring Boot的特色 5
. ?( H0 n0 V/ H3 O2 U F. {1.1.4 Spring Boot支持的开发语言 6
2 N X* z/ u& W6 \1.1.5 学习Spring Boot的前景展望 6
: h2 R) t% H) D2 \+ k5 Y1.2 学习Spring Boot的建议 7
7 O7 G! d1 N7 S! {6 _1.2.1 看透本书理论,模仿实战例子 7
! o- X/ f# w, \6 g& e( H1.2.2 利用开发工具自动学习 7& g# Y8 R u O5 L
1.2.3 发现新功能的方法 8
# h6 f. J9 k$ K: u- r3 t" Y1.2.4 建立高阶的思维方式 9
9 L+ D x1 t1 g! I- K4 M1.2.5 控制版本,降低犯错的代价 10; {; t$ o9 ?# l8 P8 J+ s8 t
1.2.6 获取*新、*全的资料 11
) z* q& G' ?6 K0 |$ r2 w5 T$ `1.2.7 学会自己发现和解决问题 11
. c/ I t1 `* ~1 h$ y" O4 L6 q1.2.8 善于提问,成功一半 12# K$ ] d/ ^+ k) r, w( y- @1 u* e6 }! f
第2章 准备开发环境 14
. G- J# i9 e. u2.1 搭建环境 14
3 ? z- ?* q6 H; n4 X0 L, o5 w2.1.1 安装Java开发环境JDK 143 q6 e# |3 i5 x
2.1.2 配置JDK的环境变量 15, d4 m! _6 V' q' l. ~
2.2 熟悉Maven 18% d) V& s6 t: h
2.2.1 安装及配置Maven 188 {, s" {5 x0 s# n- _7 v
2.2.2 认识其中的pom.xml文件 19% w3 y: `) M; V$ P. t9 f
2.2.3 Maven的运作方式 23
* e) v: U1 c1 R" e$ W2.2.4 配置国内仓库 235 `* m0 L- U+ ]9 E( i$ G
第3章 使用开发工具 25% Z) @/ c; \/ g; X
3.1 安装开发工具IDEA及插件 25
) T* Q7 N/ d4 ^/ E3.1.1 安装IDEA 25/ k" g3 V" r% D- H L3 q
3.1.2 配置IDEA的Maven环境 27/ o3 x, m8 i4 ~) Q' ]/ k3 z
3.1.3 安装Spring Assistant插件 27
- v) o. J' G @8 x$ {3.1.4 安装插件Lombok 28
- |1 \" U [8 D* A$ s( e2 _3.2 实例1:用Spring Boot输出“Hello World” 308 @, t+ T s& w W% j" t; {& h
3.2.1 构建Spring Boot项目 303 X$ x9 D3 m H v7 V
3.2.2 编写控制器,实现输出功能 31; `* m/ Q0 l6 Z& N8 b% t1 U2 [
3.2.3 在IDEA中运行程序 33$ ~) G; C$ X: I. p0 Q, u( O
3.2.4 打包成可执行的JAR包 33" _8 Z1 ?9 U! j2 ]+ }! g
3.3 在Eclipse中开发Spring Boot应用程序 35
5 ^# r) q) L% v/ K" H3.3.1 安装Eclipse 35
- o" Z! w W, q/ G0 d3.3.2 安装Spring Tools 4插件 35; e" Z1 r" ]. N4 O( Q) r% L% G
3.3.3 配置Eclipse的Maven环境 36
% B3 n' D* y( }! p3.3.4 创建Spring Boot项目 37* c. r# o" s/ k9 v1 a9 W
3.4 了解Spring官方开发工具STS 378 P2 D% ]3 U u
3.5 必会的IDEA实用技能 38
3 u r0 m- A/ |' E$ {6 }3 P3.5.1 智能提示代码 38
1 m: Y$ M' C) G+ ]- \/ W) H; a3.5.2 自动提示参数 396 K# F( P3 D2 C: A, g! ^' P
3.5.3 实现自动转义 39
1 b, U. ^* J$ }* N X3.5.4 自定义高复用代码块 40
8 Y) Z6 ~% q! h G* Z. f3.5.5 设置注释信息 41
* ]. H2 U+ g+ k( }6 Y( D8 \8 `! F3.5.6 超能的“Alt+Enter”快捷键 42
. e3 j1 {( m* T/ Z* J: K6 M3 C3.5.7 使用全局配置 424 _% `* V I. v' f+ m; G
3.5.8 自动生成语句 43
, p/ ~5 ~3 N+ d. y s4 ~3.6 比较IDEA与Eclipse 44! k$ Y+ A) P D) l3 @ v8 @
3.7 如何使用本书源代码 47
# V- F4 a3 M) r% L; {3.7.1 在IDEA中使用 47. U* G/ w3 W& b* u
3.7.2 在Eclipse(STS)中使用 47
, y4 l4 T6 Z: D/ g$ q& H' u
7 k" V' U4 L5 ^4 h0 V1 g/ B基 础 篇
& u" T, q9 n7 a" R
0 ?, ~+ y6 _1 [6 ?+ r2 b第4章 Spring Boot基础 50
2 ^7 S# d8 o7 k$ f4.1 了解Spring Boot 503 F" Q. H, g4 A/ b
4.1.1 了解Spring Boot项目结构 50
, D8 |5 _$ y1 b* s4.1.2 了解Spring Boot的入口类 51: f0 j4 [& ^ B" z% f
4.1.3 了解Spring Boot的自动配置 52
) k( o3 s) M5 q4 O R8 T5 r4.1.4 了解Spring Boot热部署 52
1 A; J) Q/ T1 l4 A2 a4.1.5 实例2:定制启动画面 53
" f. B0 [ t, @4.2 Spring Boot的常用注解 54
# h8 j% e6 J" O, ~4.2.1 什么是注解式编程 55
- N; J: x1 N" e6 g7 |1 ?4.2.2 了解系统注解 55
. b7 F7 @4 K! B( v- o& N# ?& D4.2.3 Spring Boot的常用注解 569 W. a0 I8 g$ _) e/ s; S
4.3 使用配置文件 61# _ s) s% B7 S& a8 d, h4 ]
4.3.1 实例3:演示如何使用application.yml文件 62
& I3 H5 b' N( B7 I/ k0 K4 h4.3.2 实例4:演示如何使用application.properties文件 65
7 ^6 E. f' b) [7 J4.3.3 实例5:用application.yml和application.properties配置多环境 67( q# F: o+ C1 C( r0 {) O
4.4 了解Spring Boot的Starter 69
' }0 i4 P6 A9 @2 X. w4.4.1 官方的Starter 69. o/ F2 e) f/ l( U6 h% ~7 _- ~
4.4.2 使用Starter 70
6 k( i9 P( d2 L, v: w9 Y第5章 分层开发Web应用程序 71
, q! r; G' @( F) N3 m5.1 应用程序分层开发模式——MVC 71( L1 u. l0 h$ k9 z0 j3 d; ^2 l
5.1.1 了解MVC模式 71
- u9 g3 n9 Y2 p; L4 N! u# @! Q- T5.1.2 MVC和三层架构的关系 72* y+ s' } t+ p9 e9 W
5.2 使用视图技术Thymeleaf 73
9 w" \0 K- x( j. H, o4 l5.2.1 认识Thymeleaf 73; ~9 s( N3 y/ p( {5 ]
5.2.2 基础语法 75
$ t( c2 }( ~4 V2 u# Q& i( `5.2.3 处理循环遍历 781 w2 G2 i% j( a
5.2.4 处理公共代码块 80& ]/ t8 n4 s. u( M9 Z9 o
5.2.5 处理分页 81& u( D5 ?; c5 O) j, g7 Q
5.2.6 验证和提示错误消息 82
6 _' w8 p) r: \* D! x" v! Y5 P5.2.7 实例6:编写Thymeleaf视图以展示数据 83
2 ^5 y2 U3 o! Q5.3 使用控制器 85
( k% I& Z* b8 @9 K5.3.1 常用注解 85" f I4 D& t. R" o/ r* S( T6 X
5.3.2 将URL映射到方法 86
8 \8 t' [( n- h1 E. V5.3.3 处理HTTP请求方法 875 A8 r! R( O$ W% k* R r: h5 ?) F
5.3.4 处理内容类型 89
8 a7 B- q5 i6 D( E5.3.5 方法中参数的使用 90
9 b/ e, v; S% w7 ~: N! t! L3 w4 C5.4 理解模型 93
/ |' a& F0 x: s, v" z; I. |5.5 实例7:实现MVC模式的Web应用程序 94
( x Z, B: G# C6 E/ A. R& O' q0 C+ H5.5.1 添加依赖 94* y: F4 G8 W1 o }: E3 U
5.5.2 创建实体模型 953 o( R* w) L; J+ v' z
5.5.3 创建控制器 958 l6 ~" f. A4 p- z
5.5.4 创建用于展示的视图 962 @5 c8 ]) ~( D
5.6 验证数据 96
& a) S: U1 G/ K5.6.1 认识内置的验证器Hibernate-validator 96! A4 \. S2 l) X" I4 R$ k
5.6.2 自定义验证功能 98* ?! K# y- _ J2 J6 @' ?& I+ b( |
5.6.3 实例8:验证表单数据并实现数据的自定义验证 99
0 l# W' m) U- Y; ^* i5 f! o; g+ V第6章 响应式编程 103
& G- c9 f: G% p) l6.1 认识响应式编程 103
: A' r- s8 n9 ?3 p# A) b6.1.1 什么是WebFlux 1033 J0 Y. g9 O2 q( v8 X
6.1.2 比较MVC和WebFlux 103; t/ m' N3 f8 S( ~9 A0 I: e
6.1.3 认识Mono和Flux 105
$ I. q3 a5 s7 R5 ?% p0 }. T9 Q6.1.4 开发WebFlux的流程 1069 f# a% f6 ?% x0 x- Z7 i. l0 ]
6.2 实例9:用注解式开发实现Hello World 107
9 p$ \* _. i$ @4 [& N) c; e6 E f6.2.1 配置WebFlux依赖 107
# ?0 K$ I: D, G* Q6 p6.2.2 编写控制器 107
3 v3 d# o; K7 K: E6.3 实例10:用注解式开发实现数据的增加、删除、修改和查询 108
7 ^* j9 O; I: n3 Y' b6.3.1 创建实体类 108
- a# ?( @6 m9 ~* j* i% J5 P6.3.2 编写控制器 108
8 |! v) q4 {+ o4 y/ m6.3.3 测试API功能 1107 {8 E# D( K! w0 ]8 z
6.4 实例11:用响应式开发WebFlux 111+ B! p/ o' w, k k2 R* S
6.4.1 编写处理器类Handler 111; D0 X2 Y6 D5 ?/ O1 R- F* n0 D
6.4.2 编写路由器类Router 1122 m* P. V8 T; `8 k$ x+ a
6.5 实例12:用WebFlux模式操作MongoDB数据库,实现数据的增加、删除、修改和查询功能112' z" M" b( y+ M1 H" X
6.5.1 添加依赖 1125 ]1 J8 g- s1 b4 n5 m
6.5.2 创建实体类 113& V# Q/ K' c7 d4 J7 K
6.5.3 编写接口 113
2 W/ V6 ?1 q0 u# F9 e6.5.4 编写增加、删除、修改和查询/ C+ @) @( O* P( L' ]; j# A1 N
数据的API 113
$ K# R( e7 W( W
; `* g+ ?2 v0 [8 K }& E% f进 阶 篇% {2 w' a1 B; Z u, y9 f" g5 h6 W* n8 i
/ q: |* W% Z! n( D* B: f第7章 Spring Boot进阶 118$ T' x4 q+ M v) e4 W
7.1 面向切面编程AOP 118 D a2 l( T# r1 U/ m$ D3 L
7.1.1 认识Spring AOP 118$ I9 W% w) D( ?$ E
7.1.2 实例13:用AOP方式管理日志 119; ^# k% A* r6 c/ B+ I: }5 g
7.2 认识IoC容器和Servlet容器 1218 s8 P1 {" L" K
7.2.1 认识容器 1218 p3 m5 T$ M' H" \6 J3 t/ o
7.2.2 实例14:用IoC管理Bean 123
- h0 K$ L& R8 T0 a- ], p( ]7.2.3 实例15:用Servlet处理请求 1253 q0 W! J/ n: w' ?9 m3 ~4 q) W
7.3 过滤器与监听器 126
! C& ^5 K0 f u9 K; Q7.3.1 认识过滤器 1263 L$ Y7 E4 k- e: H2 h) v0 N d
7.3.2 实例16:实现过滤器 128
# o: r+ Y6 |) f7 O7.3.3 认识监听器 128
- q v" l' h+ \4 ~( R+ H1 d- @7.3.4 实例17:实现监听器 129; A. u. V7 T0 W0 T3 Z
7.4 自动配置 1306 t' q4 }3 _8 K
7.4.1 自定义入口类 130+ p" ]% m* [6 i& K
7.4.2 自动配置的原理 131 u# o( A, }* k3 A
7.4.3 实例18:自定义Starter 133
1 e& O3 t- Q7 c- X/ Y7.5 元注解 1369 Q% j9 L3 H1 T9 a3 R1 F
7.5.1 了解元注解 136+ y6 R; e v6 [; Y
7.5.2 实例19:自定义注解 137
# H3 ?, B0 c. N% P7.6 异常处理 1387 Z8 D$ y! }1 `
7.6.1 认识异常处理 138
) O5 d6 J, e9 E! k' J9 Y7.6.2 使用控制器通知 141" p) ?- b' W4 J; e
7.6.3 实例20:自定义错误处理控制器 142
. c ]7 J7 q1 S3 [* k8 {: D7.6.4 实例21:自定义业务异常类 143" C7 ^* W2 p4 F: V# k7 X
7.7 单元测试 1455 F) s6 S3 V" v( x, R) d
7.7.1 了解单元测试 145+ f( G/ L& t! }6 K7 H
7.7.2 Spring Boot 的测试库 145
g! F( t4 r) H$ m9 Q; v. G' G7.7.3 快速创建测试单元 1491 R9 m1 |* |( D# H3 U: k
7.7.4 实例22:Controller层的单元测试 150+ m* y# P$ ^' r
7.7.5 实例23:Service层的单元测试 153! V/ i' C5 C% ]) m( [
7.7.6 实例24:Repository层的单元测试 154
2 d$ H' M) n# i2 A第8章 用ORM操作SQL数据库 156
5 U* o7 U5 g0 q7 D& X7 _! Y8 N8.1 认识Java的数据库连接模板JDBCTemplate 156
. @4 {" M: j( @" r/ H/ o. H8.1.1 认识JDBCTemplate 156! a1 C# r. Y. A1 y# q
8.1.2 实例25:用JDBCTemplate8 o* t; \+ q$ c' Z ~
实现数据的增加、删除、修改和查询 157. R9 |% P6 j5 G+ U- Y% T7 ?) Y
8.1.3 认识ORM 161
: h- u+ }3 s7 O0 Z' B+ g8.2 JPA——Java持久层API 161
, c* x$ X0 T2 A r9 T8.2.1 认识Spring Data 161& @& }/ x' m# m3 W/ Q! N# @
8.2.2 认识JPA 1627 y) y- v6 @: I5 c; ~
8.2.3 使用JPA 164
8 ~0 a. I- b" ^( _. }/ P* u0 j8.2.4 JPA注解和属性介绍 165
: v# Z6 `. X6 `4 Q8.2.5 实例26:用JPA构建实体数据表 167
|: X# S0 @( a4 }. P6 Z% h' m8.3 认识JPA的接口 1691 ~$ ]) O1 R0 ]
8.3.1 JPA接口JpaRepository 169
: V5 H$ t0 O( U1 l8.3.2 分页排序接口PagingAndSortingRepository 169+ D) s# M7 }' t# n* z
8.3.3 数据操作接口CrudRepository 170
1 i6 G: ^2 [, Y. X! A8.3.4 分页接口Pageable和Page 170' }' [9 w# w: U7 B$ C, K* D( ?' m3 {0 `
8.3.5 排序类Sort 171% d$ H7 r- F# g; l
8.4 JPA的查询方式 171
% X( A4 U) d% ]- v1 `8.4.1 约定方法名 1719 [- u8 g$ L* R. ~( d. P; H
8.4.2 JPQL 173
( e! O I6 N5 c9 R J) b) w8.4.3 原生SQL 1747 A2 d! m: f9 Z* M
8.4.4 Specifications 175
P* s+ ^8 v' e8.4.5 ExampleMatcher 177) \; H! c2 D/ O8 c9 a5 G6 L
8.4.6 谓语QueryDSL 177
% `4 } i& c: {- \8.4.7 NamedQuery 1770 k& T) F: ]3 O# R; N
8.5 实例27:用JPA开发文章管理模块 178
g/ A- `4 f2 \( U4 X8.5.1 实现文章实体 178
! W" d4 s6 c+ ~; V O" X4 K8.5.2 实现数据持久层 179
5 A ~9 ?% Z9 u% g' W8.5.3 实现服务接口和服务接口的实现类 179
6 ] y( t, s+ N% `- B: j8 a8.5.4 实现增加、删除、修改和查询的控制层API功能 180
: ~* @ B6 q+ N! O' F8.5.5 实现增加、删除、修改和查询功能的视图层 182
4 E% Y0 s9 D/ s/ }$ s- s1 @8.6 实现自动填充字段 185
# F1 v) y& Q6 A& n% }8.7 掌握关系映射开发 187
9 y' o' ?; i! e! o8.7.1 认识实体间关系映射 187
. L+ _& j/ ]' `' E; z8 }8.7.2 实例28:实现“一对一”映射 188
$ v. O: I# q# `2 P$ Z8.7.3 实例29:实现“一对多”映射 192 c( f+ u% C l% `0 g/ W
8.7.4 实例30:实现“多对多”映射 195
/ p3 {# S' T h1 q3 t K8.8 认识MyBatis——Java数据持久层框架 1971 n# \" b0 f: w) ?, V
8.8.1 CRUD注解 198
! I1 d% [6 \$ C# c. f! K, c! l- A7 t8.8.2 映射注解 198; v. C! T8 q5 |0 a% J) H
8.8.3 高级注解 199% q! [2 a0 @: N' a
8.9 实例31:用MyBatis实现数据的增加、删除、修改、查询和分页 200/ \+ l# D5 y1 u- X& q
8.9.1 创建Spring Boot项目并引入依赖 201
6 z7 o' }1 h$ i1 X8.9.2 实现数据表的自动初始化 2016 l1 I/ S- e3 Q. N- Z
8.9.3 实现实体对象建模 2027 z2 C$ y r. I
8.9.4 实现实体和数据表的映射关系 202
& Z0 Q5 }. [% G* h* s% E% g- B8.9.5 实现增加、删除、修改和查询功能 203
: B, S) z# C6 s2 Y+ k0 o; d# E8.9.6 配置分页功能 204& C: e, h( c- d" m
8.9.7 实现分页控制器 205
: h6 g x# W8 k' S, u8.9.8 创建分页视图 206
( n0 k: O0 V0 w' { i3 }' c7 h: A8.10 比较JPA与MyBatis 207" M2 C' I3 E( q( ^8 y, \; ~% d
第9章 接口架构风格——RESTful 209
3 x4 P, o" J. [0 E* T9.1 REST——前后台间的通信方式 209
- _& [0 \( K P0 y9.1.1 认识REST 2098 v9 j3 p# j$ V* B! A
9.1.2 认识HTTP方法与CRUD动作映射 210
- \& v- {. Q Z! b6 H9.1.3 实现RESTful风格的数据增加、删除、修改和查询 210
, E- o8 g' f: D( ^- t* v# O9.2 设计统一的RESTful风格的数据接口 2127 r! d0 K5 e8 w7 t0 V l
9.2.1 版本控制 212
?: G2 B& _8 k+ Y; p& D9.2.2 过滤信息 213
- P) H) p- ]* b0 @2 i9.2.3 确定HTTP方法 213
6 z! P& k. d6 F8 c) b9.2.4 确定HTTP的返回状态 2137 ?# f% f& n4 d. L& g0 J
9.2.5 定义统一返回格式 214) P! M& V' C1 w# k/ M8 q3 I
9.3 实例32:为APP、PC、H5网页提供统一风格的API 214
* u m; C* d1 n9.3.1 实现响应的枚举类 214) h% ?% ?7 ^4 o7 w% x
9.3.2 实现返回的对象实体 215
& ?$ K; E' _8 T% v, S+ C2 T1 U9.3.3 封装返回结果 215+ ?9 p" @% u7 R' O+ ^1 X
9.3.4 统一处理异常 2159 V1 K9 D& z, N6 k& ]) U' A
9.3.5 编写测试控制器 219
4 M3 E+ U3 P& s! [ l9.3.6 实现数据的增加、删除、修改和查询控制器 2203 @* e9 g, g4 O' U
9.3.7 测试数据 221) u! H+ Q/ }- L& F" z
9.4 实例33:用Swagger实现接口文档 2222 A- F0 m' ]* S N7 x# [
9.4.1 配置Swagger 222
; [5 W; I# ~2 `1 A$ ^9.4.2 编写接口文档 224 {' v+ k3 s. c* E+ Z
9.5 用RestTemplate发起请求 224) |& q& w4 D0 c. K6 S8 D: x
9.5.1 认识RestTemplate 224
5 [# Q9 j0 i# O' _9.5.2 实例34:用RestTemplate发送GET请求 225
2 P3 Z v) b0 q" ^5 {' ?4 W9.5.3 实例35:用RestTemplate发送POST请求 228
2 ]2 w7 @ Z5 y/ t8 i9.5.4 用RestTemplate发送PUT和DELETE请求 231
4 k3 H& L- `) o3 O第10章 集成安全框架,实现安全认证和授权 233
* ?8 c- i5 L8 G r10.1 Spring Security——Spring的安全框架 233
% ^5 A8 t0 I x0 n& _8 ^10.1.1 认识Spring Security 2335 n7 V3 H; d! T5 c" W$ O
10.1.2 核心类 235
& m; }* P' v# A10.2 配置Spring Security 240" k4 h$ l2 H# U/ g5 l
10.2.1 继承WebSecurityConfigurer-Adapter 240
- B4 O0 q$ J3 E+ L9 C) R: K2 e) ]10.2.2 配置自定义策略 240( x* Y) J& n% o. _
10.2.3 配置加密方式 242
$ S" |( a; }1 x10.2.4 自定义加密规则 242
, x7 a8 u7 \) N) Y& V! a10.2.5 配置多用户系统 242( C" m3 R `7 J- U1 s5 W
10.2.6 获取当前登录用户信息的几种方式 244
' F. |9 W- D- D" n8 J10.3 实例36:用Spring Security实现后台登录及权限认证功能 246
2 K# d2 U- V' {1 `10.3.1 引入依赖 246% g' M4 T4 j; ~$ [
10.3.2 创建权限开放的页面 246
3 R: N* [' m" [! Y' I+ `10.3.3 创建需要权限验证的页面 2473 y3 x+ `; m9 L$ z8 I1 f
10.3.4 配置Spring Security 247& N: Q: A: c8 D9 y) L! h
10.3.5 创建登录页面 248
7 [5 ^" P' k# x1 Y& G9 S6 v* G10.3.6 测试权限 249- B& l$ R% W( f# z% z- ?3 h
10.4 权限控制方式 2491 j6 }0 O6 J. Z
10.4.1 Spring EL权限表达式 2495 G4 Z4 K7 y% j3 s# |+ B% z5 e6 p
10.4.2 通过表达式控制URL权限 250
' p& S. p; e, B, a3 T: K10.4.3 通过表达式控制方法权限 2526 \' A, I& r) ?0 {5 @3 V! b& ~# X
10.4.4 实例37:使用JSR-250注解 254
4 v2 x) J* }# |2 U* d8 q, z10.4.5 实例38:实现RBAC权限模型 256
8 n4 p2 r* p: {' D) F1 h; J10.5 认识JWT 258; M6 f; m' [) [' ]. _( I4 Z
10.6 实例39:用JWT技术为Spring Boot5 ?$ }4 M/ v. A% _* K
的API增加认证和授权保护 260
" t$ F+ R! K$ v5 Y+ e& M/ D10.6.1 配置安全类 260
0 H5 q2 ^5 L! @7 U: i1 [10.6.2 处理注册 261
" \1 M) ^* i1 t1 w# a10.6.3 处理登录 262* Q. ?" q' L# H2 t9 I
10.6.4 测试多方式注册和登录 264" `' l. A4 g' b
10.6.5 测试token方式登录和授权 265
# V" u6 x( _$ @' L' S10.7 Shiro——Apache通用安全框架 266, Y9 j4 B1 S: H. `
10.7.1 认识Shiro安全框架 2662 ?4 f9 S; P q# E! @
10.7.2 认识Shiro的核心组件 267
0 Y$ ^! t3 F! b+ n0 w" {- S10.8 实例40:用Shiro实现管理后台的动态权限功能 267. X0 I) s' {/ Z
10.8.1 创建实体 267
' z5 |+ x1 O+ f. U$ @, |10.8.2 实现视图模板 270
+ F/ j3 @" {, g) z" \2 [10.8.3 进行权限配置 271/ F6 A' c% M$ P1 Q
10.8.4 实现认证身份功能 271; P {* i7 g; t( g. }
10.8.5 测试权限 272" K% D6 c: `' X) r# z, p9 Q
10.9 对比Spring Security与Shiro 273$ g1 p. i$ }2 z1 ?; k) L
第11章 在Spring Boot中使用Redis实现高并发 275) k Q+ H! Z w1 E. Y4 n9 [: s
11.1 认识Spring Cache 2759 @6 T( ]; d# Y, U
11.1.1 声明式缓存注解 276' ?! o1 _* T) l4 Z
11.1.2 实例41:用Cache进行缓存管理 278
/ A" n1 p0 e! H4 z2 Y" z11.1.3 整合Ehcache 281. o+ u. n8 D0 Y+ C! o* n; M6 o" R& e
11.1.4 整合Caffeine 281
F/ N( `& I' \/ w+ ^11.2 认识Redis 282
( s# ^/ i) b* I11.2.1 对比Redis与Memcached 282! B x2 Y' c9 h0 _( J; S6 w2 D
11.2.2 Redis的适用场景 285
9 s N+ P# X) t* E; P# u11.3 Redis的数据类型 2852 N" a6 x m$ ?8 @: h" v
11.4 用RedisTemplate操作Redis的5种数据类型 287
. R, ]: k; q6 D9 Q. d8 b* R11.4.1 认识opsFor方法 287
, h ?( n/ K# R! W0 w+ Z$ d2 a. U11.4.2 实例42:操作字符串 287+ ?. ^( S1 r7 T1 I: c
11.4.3 实例43:操作散列 290
! e( g. U$ y/ ~6 m. ^9 N+ T11.4.4 实例44:操作列表 294
; I' P6 R: u2 V- \5 G0 o8 O11.4.5 实例45:操作集合 298
6 z& X7 W& W& y# C11.4.6 实例46:操作有序集合Zset 301# {( _4 r. ~* U7 e- G) J
11.4.7 比较RedisTemplate和StringRedisTemplate 306
+ s. J4 U9 q7 j11.5 实例47:用Redis和MyBatis完成缓存数据的增加、删除、修改、查询功能 306
; j% l5 K& b. e9 `. l+ a5 W/ a11.5.1 在Spring Boot中集成Redis 306
+ }6 Y- M" M% C P& T( V11.5.2 配置Redis类 307
9 ^* g! \6 w- Y4 J11.5.3 创建测试实体类 3083 q0 w) @9 Y2 I5 T" u) a- U3 p
11.5.4 实现实体和数据表的映射关系 3095 I5 d9 O; ?' K% M
11.5.5 创建Redis缓存服务层 309
) B3 h5 D' |+ b- `$ L! O11.5.6 完成增加、删除、修改和查询测试API 3104 w1 Z0 e0 s+ O1 J* y
11.6 实例48:用Redis和JPA实现缓存文章和点击量 311: u5 _" S% R+ E6 Y8 Z2 ^
11.6.1 实现缓存文章 311
I4 v( u/ q+ q: t$ {11.6.2 实现统计点击量 3125 H8 {: {" c4 L- @; W8 n# V
11.6.3 实现定时同步 3127 T; ~$ \: h, [. K. Q
11.7 实例49:实现分布式Session 3131 ]( Z1 G8 J3 Q$ q2 K# E
11.7.1 用Redis实现Session共享 313, @6 c& M; e7 Q) H. F- \$ G6 [
11.7.2 配置Nginx实现负载均衡 314; M9 E# t3 x2 Q' C9 x' w* F6 b% f
第12章 用RabbitMQ实现系统间的数据交换 3160 l5 ^) |- n5 }& X6 o5 `$ W+ B2 X
12.1 认识RabbitMQ 316
$ ]! F% r* s" N3 n& U% e/ l12.1.1 介绍RabbitMQ 316
# x4 J8 w8 o# w+ Z. j2 M; Q8 P12.1.2 使用场景 317
2 n- u9 N. O3 F, K9 ^12.1.3 特性 318
3 Z7 @ P8 ?5 S! E3 k6 O8 h: N12.2 RabbitMQ的基本概念 318! x: g1 f5 C; N* q& t
12.2.1 生产者、消费者和代理 3184 Z( X4 V$ n* a. F& N5 A7 G
12.2.2 消息队列 319. T3 p9 I8 V+ a
12.2.3 交换机(Exchange) 3196 D2 Q& \' ]) x7 h$ B
12.2.4 绑定 320( ]1 i( n8 _8 r: d; c. y: C# l
12.2.5 通道 321: h# G) { p3 h/ P9 H0 R: Y8 l! T* Z
12.2.6 消息确认 321
/ b) g0 ~% g3 i2 G12.3 RabbitMQ的六种工作模式 321
2 u8 e% d" [0 P- r. y, y12.3.1 简单模式 321
, e2 O( @, }1 L; j4 L* v12.3.2 工作队列模式 321 l: }2 m3 r$ g6 e0 `( {3 X
12.3.3 交换机模式 322
3 o0 N* a5 p3 k" f" X* n12.3.4 Routing转发模式 322
. q' E" d W( h12.3.5 主题转发模式 322. j) p2 X! B: C; B
12.3.6 RPC模式 323
( w. F3 G7 k! H+ ]" _12.4 认识AmqpTemplate接口 323
2 r- P9 t- Q5 d. |$ q! {" Y12.4.1 发送消息 324
4 {, ~, }7 g. G12.4.2 接收消息 3245 Z7 o0 c* o% g
12.4.3 异步接收消息 325
% T' a0 Q$ n9 k7 v7 c6 |! W12.5 在Spring Boot中集成RabbitMQ 325
/ ~' M8 N3 `% p% ?( ?) I8 c. e12.5.1 安装RabbitMQ 325
. h; |2 Y& a3 R9 n# X* N12.5.2 界面化管理RabbitMQ 326# ^5 u5 g3 |' \# D$ V" Z
12.5.3 在Spring Boot中配置RabbitMQ 327- U9 l. X# o# l; c- g$ o/ D
12.6 在Spring Boot中实现RabbitMQ
, H# Y7 I% h# R& \+ I1 e的4种发送/接收模式 328
9 _4 Q: G X F12.6.1 实例50:实现发送和接收队列 328/ A. m, H1 j! v1 w0 N
12.6.2 实例51:实现发送和接收对象 330
* A, j. ?6 X6 \* D G/ \$ ]0 A12.6.3 实例52:实现用接收器接收多个主题 3314 W8 r) i' k& o; D) Z1 {; m
12.6.4 实例53:实现广播模式 334
+ `( Q% ~) a- u/ s3 }12.7 实例54:实现消息队列延迟功能 336
; t6 {" } U& ]7 w% i- W0 I+ |: u9 f第13章 使用NoSQL数据库实现搜索引擎 339! p/ }0 A6 @/ B& ?' s5 G1 t6 m
13.1 Elasticsearch——搜索应用服务器 339
" K3 @6 p3 p" @! U8 r# r13.1.1 什么是搜索引擎 339, @6 @. W5 f- F. m; f: g
13.1.2 用数据库实现搜索功能 339& M8 }4 F0 E% W. A, B- A
13.1.3 认识Elasticsearch 343" ~* H# C! Z$ G2 a! @+ `
13.1.4 Elasticsearch应用案例 343
8 J9 _2 m* u! g6 r13.1.5 对比Elasticsearch与MySQL 343( w! @: I4 m8 L/ [
13.1.6 认识ElasticSearchRepository 344
8 @! M" ]6 B+ f" `) z13.1.7 认识ElasticsearchTemplate 345, X! e( }6 ~5 p
13.1.8 认识注解@Document 3454 n5 s9 b8 Y- ~9 C# l& _6 D2 D
13.1.9 管理索引 347
8 `( J: p+ v" d' S. r! Q13.2 实例55:用ELK管理Spring Boot应用程序的日志 348" \8 q( `' o. K: F4 j; j. \
13.2.1 安装Elasticsearch 348$ [+ ^/ m' D V$ e5 n N
13.2.2 安装Logstash 349
% r# l( Z& l+ B1 v/ ~3 S: x6 `* ]; V13.2.3 安装Kibana 350
" F! x3 T D3 T7 \, O% i13.2.4 配置Spring Boot项目 350% F" G: B p" o, m# y' W7 O- n
13.2.5 创建日志计划任务 351
: l* A) j6 D4 s% B* `+ J13.2.6 用Kibana查看管理日志 3525 H- e+ d# O4 b6 l
13.3 实例56:在Spring Boot中实现增加、
! A: C7 v3 D! G B& p删除、修改、查询 文档的功能 353) Q1 L* \. c6 p1 R- z; `
13.3.1 集成Elasticsearch 353) [) `% {$ {# K2 d7 s! \( E5 o
13.3.2 创建实体 353; ]4 I) W+ ]2 V4 w5 G' y% l
13.3.3 创建增加、删除、修改和查询API 355
7 p% |+ I3 k& i4 n2 a3 t" E. {) ]13.4 Elasticsearch查询 356
( U* Q3 P' ~. r% K# Z13.4.1 自定义方法 356
! C6 ]" k) T* r& o/ L13.4.2 精准查询 3572 M( ]5 o( L5 ?
13.4.3 模糊查询 359! U, A8 M7 e+ _: `1 n
13.4.4 范围查询 3627 ^+ Z% X0 L- R1 w2 O) ]
13.4.5 组合查询 362
* W3 q; H6 ~/ d, m6 w( ^6 ~13.4.6 分页查询 3630 J w* X. B+ Q/ ?# ], ^, o
13.4.7 聚合查询 364% V0 C& r6 [* P. |
13.5 实例57:实现产品搜索引擎 365+ \0 Q+ B6 Q& U' W
13.6 Solr——搜索应用服务器 3670 G+ k) p$ ^( `" W
13.6.1 了解Solr 367
8 U# O5 V8 s; {. S2 F( N13.6.2 安装配置Solr 3678 c3 k$ L, V( w, t
13.6.3 整合Spring Boot和Solr 368( ]% u: }; |: F- K% T& b; @
13.7 实例58:在Solr中实现数据的增加、删除、修改和查询 369
4 b" ^( ]( }& g- S: M, b2 Z2 w" q d- `/ `$ I
13.7.1 创建User类 369+ ]5 Q8 ?( O$ O$ Z" U5 g
13.7.2 测试增加、删除、修改和查询功能 369% D+ X: U. v' S4 v, i! M
13.8 对比Elasticsearch和Solr 372
' E2 G% c* {$ j7 u- |* B$ l) S7 @
( J4 L* J0 w1 {: ~项目实战篇/ y5 O, k3 {& L! C
7 X* }( z" W- A+ z/ w/ g% u第14章 实例59:开发企业级通用的后台系统 3769 ` @9 D! P! {* m, {6 U
14.1 用JPA实现实体间映射关系 376
$ }4 z8 K! x/ T6 c# {14.1.1 创建用户实体 376
% s0 Y0 G! m3 @" V14.1.2 创建角色实体 377
* S* x+ C# s8 k' H14.1.3 创建权限实体 378
9 ~) s/ _. K" U8 [5 @# d14.2 用Spring Security实现动态授权(RBAC)功能 380
3 [% w& I0 L& a. w1 l" D" z% H* I14.2.1 实现管理(增加、删除、修改和
* U0 U; B7 k1 k( J3 k% v9 l查询)管理员角色功能 380
% ]7 o5 L) j1 V! i- t2 q& C# K14.2.2 实现管理权限功能 3814 G) [% G. |) Y! L. s$ t$ q
14.2.3 实现管理管理员功能 383
: O1 p6 @6 E. [8 }4 R% P14.2.4 配置安全类 384
# G* ?( [+ X: }7 u14.2.5 实现基于RBAC权限控制$ m; V R4 D7 T( s# y
功能 386
! W, x9 y3 D0 `% q14.3 监控Spring Boot应用 387
/ A# g- Y. f) z* H5 ~% A14.3.1 在Spring Boot中集成Actuator 387
( A! \# V# z( k1 c9 b+ r2 h14.3.2 在Spring Boot中集成Spring Boot admin应用监控 3906 U) T, i5 S+ q8 w
14.3.3 在Spring Boot中集成Druid连接池监控 3923 F( O; }! a' X! {1 j8 g
第15章 实例60:实现一个类似“京东”的电子商务商城 394
1 r: B" J9 E9 {0 Z6 r, Z, ~) L- V15.1 用Spring Security实现会员系统 394
3 B. M4 T9 d% X7 Y15.1.1 实现会员实体 394; l- k; n+ S& \, r
15.1.2 实现会员接口 395
: @& X+ L& M- v' n, \15.1.3 实现用户名、邮箱、手机号多方式注册功能 396/ B' C- |2 k1 R# Y' ?' [
15.1.4 实现用MQ发送会员注册验证邮件 398
) w5 g9 z% n7 `5 Q# a8 a1 L1 A15.1.5 实现用户名、邮箱、手机号多方式登录功能 3995 b- i- _4 ?, F
15.2 整合会员系统(Web、APP多端多方式注册登录)+后台系统 400
( L% n# p% k" _4 R7 y' @7 p15.3 实现购物系统 401
5 M9 L& {1 V) O9 @ b+ `% {15.3.1 设计数据表 401. k7 ?5 t8 G, R# D- M' Y7 k
15.3.2 实现商品展示功能 402- w& l9 v" S# L0 q% k- h
15.3.3 实现购物车功能 403! Y1 ?6 h9 S7 F$ C, w8 K. e$ J9 M: t
15.3.4 用Redis实现购物车数据持久化 4048 N2 x5 W& n/ k9 S/ B5 x
15.4 用Redis实现分布式秒杀系统 406
& F v6 A( X& E" ?5 K15.4.1 实现抢购功能,解决并发超卖问题 406. R" Z+ S& M% }: ?
15.4.2 缓存页面和限流 409
| h7 b% V, _* t. j& A15.5 用RabbitMQ实现订单过期取消功能 409
+ K/ [ L R4 {) q# J15.6 实现结算和支付功能 411: H7 x- A. \; G
15.6.1 实现结算生成订单功能 411
7 y# l* t! R# V' s9 L5 h, l15.6.2 集成支付 412