新書推薦:
《
荷马:伊利亚特(英文)-西方人文经典影印21
》
售價:HK$
107.8
《
我的心理医生是只猫
》
售價:HK$
49.5
《
巴拉吉预言
》
售價:HK$
74.8
《
股权控制战略:如何实现公司控制和有效激励(第2版)
》
售價:HK$
98.8
《
汉译名著·哲学经典十种
》
售價:HK$
761.2
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:HK$
61.6
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:HK$
76.8
《
自伤自恋的精神分析
》
售價:HK$
52.8
|
編輯推薦: |
本书面向有一定 SSM 开发经验的工程师。书中通过大量的案例讲解 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企业应用开发工程师,也适合作为高等院校和培训机构计算机相关专业师生的教学参考书。
|
關於作者: |
王松,软件开发工程师,擅长JavaEE开发,对Spring Boot、Spring Cloud微服务等技术有深入的研究。著有畅销书《Spring Boot Vue全栈开发实战》。
|
目錄:
|
第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 基本用法 306
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
|
內容試閱:
|
安全管理是Java应用开发中无法避免的问题,目前主流的安全管理框架就是Spring Security和Shiro,其中Shiro一直以使用简单和轻量级著称。然而,随着Spring Boot和微服务的流行,Spring Security受到越来越多开发者的重视,因为Spring Security在和Spring Boot整合时具有先天优势。
目前市面上缺少系统介绍Spring Security的书籍,网上的博客内容又比较零散,这为很多初次接触Spring Security的Java工程师学习这门技术带来诸多不便。
笔者最早于个人博客上连载Spring Security系列教程,连载期间有不少读者加笔者微信讨论Spring Security的相关技术点,让笔者感受到读者对Spring Security的热情,也因此萌生了写一本技术图书来系统介绍Spring Security的想法。在朋友和家人的鼓励之下,这一想法逐步付诸实践,最终完成大家现在看到的这本《深入浅出Spring Security》。
本书以Spring Security 5.3.4为基础,详细介绍Spring Security的基本用法以及相关原理。得益于Spring Boot中的自动化配置,Spring Security上手非常容易,然而这种自动化配置,也让很多初次接触Spring Security的开发者知其然,而不知其所以然,仅限于会用,一旦出了漏洞,或者想要定制功能时,就会不知所措。因此,在写作本书过程中,除了基本功能的Demo演示外,还对Spring Security的相关源码做了深入分析,以便读者知其然,更知其所以然。
学习Spring Security不仅仅是学习安全管理框架,也是一个学习各种网络攻击与防御策略的过程,Spring Security对很多常见网络攻击,如计时攻击、CSRF、XSS等,都提供了相应的防御策略,因此,我们在学习Spring Security时,也可以顺便研究一下这些常见的网络攻击,以便设计出更加安全健壮的权限管理系统。
本书分为四部分:
第一部分:第1章,这一部分总体介绍Spring Security架构,方便读者从整体上把握Spring Security的功能。
第二部分:第2~12章,这一部分主要介绍Spring Security中的认证功能,以及由此衍生出来的会话管理、HTTP防火墙、跨域管理等。
第三部分:第13~14章,这一部分主要介绍Spring Security中的授权功能,以及常见的权限模型ACL和RBAC。
第四部分:第15章,这一部分主要介绍OAuth2协议在Spring Security框架中的落地。
示例代码约定
为了减少代码冗余和本书篇幅,书中的所有示例代码片段都省略了package和import部分,像下面这样:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configureHttpSecurity http throws Exception {
http.authorizeRequests
.anyRequest.authenticated
.and
.formLogin
.loginPage"login.html"
.loginProcessingUrl"doLogin"
.defaultSuccessUrl"index "
.failureUrl"login.html"
.usernameParameter"uname"
.passwordParameter"passwd"
.permitAll
.and
.csrf.disable;
}
}
有时候为了向读者演示代码的运行效果,一个案例可能会被反复修改多次,那么在后面展示代码时,将不再列出不变的部分,仅仅列出发生变化的代码片段,像下面这样:
@Autowired
TokenStore tokenStore;
@Autowired
JwtAccessTokenConverter jwtAccessTokenConverter;
@Bean
AuthorizationServerTokenServices tokenServices {
DefaultTokenServices services = new DefaultTokenServices;
services.setClientDetailsServiceclientDetailsService;
services.setSupportRefreshTokentrue;
services.setTokenStoretokenStore;
TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain;
tokenEnhancerChain
.setTokenEnhancersArrays.asListjwtAccessTokenConverter;
services.setTokenEnhancertokenEnhancerChain;
return services;
}
省略其他
正常情况下,这样的代码片段并不会影响大家理解本书内容。如果读者想要看到完整的代码片段,可以下载本书提供的示例代码进行对照理解。
源码省略约定
在分析Spring Security源码时,为了简化源码和篇幅以便于读者理解,源码中的日志输出、注释以及一些无关紧要的代码会被移除掉,像下面这样:
@ConfigurationPropertiesprefix = "spring.security"
public class SecurityProperties {
private User user = new User;
public User getUser {
return this.user;
}
public static class User {
private String name = "user";
private String password = UUID.randomUUID.toString;
private List roles = new ArrayList;
省略gettersetter
}
}
如果读者觉得这样阅读不过瘾,也可以下载Spring Security源码对照理解。
读者定位
阅读本书需要有一定的Spring Boot基础,对于无Spring Boot基础的读者,可以先学习Spring Boot然后再来阅读本书。学习Spring Boot,可以参考笔者编写的图书《Spring Boot Vue全栈开发实战》或者笔者的教程:http:springboot.javaboy.org。
源码获取
本书所有的示例代码均存放在GitHub上,地址如下:
https:github.comlenvespring-security-book-samples
所有工程均为标准的Maven工程,可以用IntelliJ IDEA或者Eclipse打开。
纠错与勘误
如果读者在阅读本书时发现错误,可以将错误提交到https:github.comlenvespring-security-book-samplesissues ,笔者将错误内容汇总后同步发布在http:www.javaboy.orgspring-security-book以及微信公众号江南一点雨。修正后的内容将在后续重印的书中得到体现。
交流社区
学无止境,笔者将继续对Spring Security的发展保持关注。关于Spring Security的最新变化,笔者都将发布在微信公众号江南一点雨上,读者关注微信公众号后,也可以进入本书微信交流群进行交流。
王松
2021年1月
|
|