1.什么是安全框架
        安全框架就是解决系统安全问题的框架,如果没有安全框架,我们需要手动处理每个资源的访问控制,比较繁琐。使用安全框架,可以通过配置的方式实现对资源的访问限制。

2.SpringSecurity
        Spring Security是一个能够为基于Sping的企业应用系统提供声明式的安全访问控制解决方案的高度自定义的安全框架,它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了 Spring IOC,DI(控制反转、依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能呢,减少了安全控制编写大量重复代码的繁琐。

2.1 PasswordEncoder 密码解析器详解
        Spring Security 要求容器中必须有 PasswordEncoder 实例。所以当自定义登录逻辑时要求必 须给容器注入 PaswordEncoder 的bean对象。

2.1.1 接口介绍
        encode(): 把参数按照特定的解析规则进行解析。

        matches() : 验证从存储中获取的编码密码与编码后的提交的原始密码是否匹配。如果密码匹配,则返回true;如果不匹配,则返回false.第一个参数表示需要被解析的密码,第二个参数表示存储的密码。

        upgradeEncoding() : 如果解析的密码能够再次进行解析且达到更安全的结则返回true,否则返回false,默认返回false。

2.2.2 BCryptPasswordEncoder 简介
        BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析器,平时多使用这个解析 器。

        BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现。是基于Hash算法实现的单向 加密。可以通过strength控制加密强度,默认 10.

2.2 自定义登录逻辑
        当 进 行 自 定 义 登 录 逻 辑 时 需 要 用 到 之 前 讲 解 的 UserDetailsService 和 PasswordEncoder 。但是 Spring Security 要求:当进行自定义登录逻辑时容器内必须有PasswordEncoder实例,所以不能直接new 对象。

2.3自定义登录页面
        虽然 Spring Security 给我们提供了登录页面,但是对于实际项目中,大多喜欢使用自己的登录页面。所以 Spring Security 中不仅仅提供了登录页面,还支持用户自定义登录页面。实现过 程也比较简单,只需要修改配置类即可。