Spring Security(maven项目) 3.0.2.8版本
前言:
通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。
涉及的基础认知:
对象,继承与实现
正片:内存认证
标题:内存认证
认证,怎么样的认证?内存认证,怎么利用内存实现认证?
看到正文第一句:
Spring Security 的InMemoryUserDetailsManager(内存中的用户详细管理器)实现了UserDetailsService,为存储在内存中的基于用户名/密码的认证提供支持,InMemoryUserDetailsManager通过实现UserDetailsManager接口提供了对UserDetails的管理。
专业词语翻译(百度):
InMemoryUserDetailsManager · 内存中的用户详细管理器
UserDetails · 用户明细
UserDetailService · 用户详细服务
UserDetailsManager · 用户详细管理器
先看这句:为存储在内存中的基于用户名/密码的认证提供支持
谁为存储在内存中的基于用户名/密码的认证提供支持?
再简单点,谁提供支持?
看到上一句:Spring Security 的InMemoryUserDetailsManager(内存中的用户详细管理器)实现了UserDetailsService
第一次翻译(去除形容词):InMemoryUserDetailsManager(内存中的用户详细管理器)实现了UserDetailsService
第二次翻译(翻译成代码):InMemoryUserDetailsManager 类 实现 UserDetailsService接口
翻译成代码我们就知道谁是主体了
InMemoryUserDetailsManager 类是主体
合并一下
InMemoryUserDetailsManager为存储在内存中的基于用户名/密码的认证提供支持
为什么InMemoryUserDetailsManage能提供支持呢?因为它实现了UserDetailsService接口。
看到下一句
InMemoryUserDetailsManager通过实现UserDetailsManager接口提供了对UserDetails的管理。
那我们可以抽象出
InMemoryUserDetailsManage实现了两个接口,通过这两个接口分别完成了对内存中的用户名/密码提供支持和对UserDetails进行管理支持
看到源码
它实现了UserDetailsManage,但是没有UserDetailsService只有UserDetailsPasswordService
不知是官方的问题还是源码的问题,从源码来看,实现的是UserDetailsPasswordService接口而非UserDetailsService,但是以官方文档为主,不就是多了一个单词,而且官方文档也说了,对内存中的用户名/密码认证的支持,密码也是一部分
下一段:
当Spring Security 被配置为 接受用户名和密码的认证时,它就会使用基于 UserDetails
的认证
注意:要配置接受用户名和密码,要不然无效
两个代码的区别在于密码是否加密
没有具体的实践可供体验(作者水平不够)
总结:
InMemoryUserDetailsManage 是Spring Security 支持内存认证的核心,其原因在于实现了接口UserDetailsServic,它除了支持内存认证还支持对UserDetails管理,因为它还实现了UserDetailsManage