1. Spring Boot框架

1.1. Spring Boot框架的作用

Spring Boot框架主要解决了:依赖管理,自动配置

Spring Boot被设计为“开箱即用”的,它是一种“约定大于配置”的思想。

1.2. 依赖管理

在开发实践中,需要使用到的依赖项很多,而且,添加的某个依赖项可能还依赖了其它依赖项,例如,当添加spring-webmvc时,spring-webmvc还依赖了spring-context,另外,再添加spring-jdbc时,spring-jdbc也会依赖spring-context,如果spring-webmvcspring-jdbc依赖的spring-context的版本并不相同,则项目是不可用的。

所以,众多依赖项必须是协调的,版本应该兼容且不冲突,Spring Boot项目都使用了spring-boot-starter-parent作为父级项目,这个父级项目就管理了许多依赖项的版本,所以,在pom.xml中添加依赖时,某些依赖项是不需要写版本号的,并且,它提供大量了spring-boot-starter-???的依赖项,例如spring-boot-starter-web,这些依赖项会将相关的一组依赖整合在一起,开发者添加依赖时更加方便!

1.3. 自动配置

spring-boot-starter依赖项中包含了spring-boot-autoconfigure,这个spring-boot-autoconfigure就是用于实现自动配置的,其中包含了大量的、预编写的自动配置类,这些自动配置类中使用了@ConditionalOnXxx系列的注解,对当前项目的环境(是否添加了哪些依赖、是否创建了哪些对象、是否配置了哪些属性等)进行判断,以决定是否需要启用某些自动配置。

另外,其实需要通过@EnableAutoConfiguration注解来开启自动配置,此注解已经被包含在@SpringBootApplication中了,所以,并不需要显式的使用此注解!

1.4. 相关注解

  • @SpringBootApplication:添加在启动类上,每个Spring Boot项目只能有1个类添加此注解

  • @SpringBootConfiguration:包含了@Configuration,被包含在@SpringBootApplication

  • @SpringBootTest:标记某个类是基于Spring Boot的测试类,执行这个类中的测试方法时,会加载Spring Boot的所有环境,包括执行组件扫描、读取配置文件等

2. Spring Security框架

2.1. Spring Security框架的作用

Spring Security框架主要解决了认证与授权的相关问题。

2.2. 相关概念

认证:识别客户端的身份,Spring Security只会根据SecurityContext中的认证信息(Authentication对象)来识别客户端的身份

授权:控制客户端是否允许访问某个资源

提示:登录是处理认证时非常重要且不可或缺的一个环节,在处理登录时,需要将通过登录验证后的结果(认证信息)存入到SecurityContext中,后续,Spring Security会自动从SecurityContext中找到认证信息,从而识别客户端的身份

2.3. Spring Security框架的基本特点

在Spring Boot项目中,当添加了spring-boot-starter-security依赖后,你的项目会发生以下变化:

  • 所有请求都是必须通过认证的,否则,会响应403,或重定向到默认的登录页面

  • 提供了默认的登录页(/login)和登出页(/logout

  • 提供了默认的登录账号,用户名为user,密码为启动项目时的控制台提示的UUID值

3. 算法相关

3.1. 关于UUID

UUID是全球唯一码,它保证了在同一时空中的值是唯一的!

UUID的算法并不是固定的,各个平台生成的UUID的特征并不相同!

UUID的主要特点:唯一、随机(不可预测)

UUID本质是由128位算法(运算结果是128个二进制位)运算得到的结果,在显示时,通常会转换成十六进制数,长度为32,并且,会在其中添加4个减号(典型格式是8-4-4-4-12),则总长度为36。

另外,128位算法的结果有2的128次方个,2的128次方的值为340282366920938463463374607431768211456。

3.2. 关于BCrypt算法

**注意:**所有用于处理密码加密并最终保存到数据库中所使用的算法,都不是加密算法!所有的加密算法都是可以被逆向运算的,加密算法是用于保证传输过程的安全性的!用于处理密码加密并存储的算法,都是单向算法,即使算法、加密参数、密文均被泄密,也不可能通过运算还原出原始的密码(密码的原文)。

早期,典型的用于处理密码加密算法主要有:MD5、SHA-1等,这些算法是可以被穷举手段进行破解的!

BCrypt算法默认使用了随机的盐值,并且,此盐值被保存到密文中,作为密文的一部分,以便于后续验证密码。

BCrypt算法最大的特点就是“慢”!它被故意设计为一种慢速算法,可以有效的防止暴力破解(循环尝试)。

BCrypt的算法的工具类是BCryptPasswordEncoder,这个类的构造方法可以传入参数,表示算法的强度值,默认为10,表示将进行2的10次方这么多次数的哈希运算,如果你认为现在执行BCrypt太快而不安全,可以适当的调整这个值,值越大,执行哈希运算的次数就越多,整体运算速度就会越慢!