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-webmvc
和spring-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太快而不安全,可以适当的调整这个值,值越大,执行哈希运算的次数就越多,整体运算速度就会越慢!