Spring Security学习——核心原理
2018-01-29 16:47
260 查看
Spring Security学习——核心原理
Spring Security是Spring生态系统的一个安全组件,而且和Spring MVC整合非常方便。Spring Security最基本的原理是基于J2EE的拦截器原理,拦截器会形成一个拦截器链,这是一种责任链设计模式。Spring Security使用实现的一些拦截器来对访问的url进行拦截,通过对缓存中的角色进行相应判定后决定是否能url访问权限。当一个URL请求到来时,Spring Security的AuthenticationProcessingFilter过滤器会拦截这个请求,在验证的过程中,会调用ProviderManager来获取角色的相应信息,而ProviderManager的角色信息可以是配置在XML文件中的,也可以要去查询数据库。验证通过后相关的权限信息就封装到一个角色对象中,并缓存到Security的全局缓存SecurityContextHolder中,下次再有拦截请求到来时就可以直接查询缓存中是否已有相应的权限信息了,如果已经有了,就直接放行,如果没有就调用非法访问处理。一个资源有可能需要具有多个权限,或是权限需要到达多少个,这都可以进行相关的权限策略进行配置,当进行权限验证的时候,AbstractSecurityInterceptor会调用FilterInvocationSecurityMetadataSource来获取访问这个url所需要的所有权限,再通过前面
提到的SecurityContextHolder获取角色信息,进行相关权限匹配。这些类名都比较长,但这样的好处是见名知意。
Spring Security的原理总体来说还是比较简单的,但是内部实现其实还是非常复杂的,主要是因为要保证Security框架的低耦合性和高扩展性,Security框架不能重度依赖Web框架的数据,也不能把太多数据暴露给Web框架,低耦合性可以保证Security框架本身的安全性和可拔插性,因此Spring Security框架有自己独立的数据缓存上下文。Spring Security还提供ProviderManager来增加框架的可扩展性,因为不知道真实的业务场景角色信息从哪里来,因此可以通过ProviderManger来管理权限角色信息,以此来降低数据提供层和应用逻辑层之间的耦合,当需要其他数据来源的时候,可自行配置自己实现,并实现相应的接口即可。
再来说Spring Security和Spring整合的事情。由于Spring Security的可配置性,因此可以无缝地和Spring进行整合。利用Spring的DI和AOP特性,可以进一步提高Security对业务场景的适应能力。Spring Security与Spring进行整合后,可完美兼容Spring MVC,并且可以像Spring一样基于xml文件或者java注解来进行配置,这样大大简化了开发的难度。在实际开发中,可以把Spring Security所需要的对象配置成相应的bean对象注入到Spring容器中,这样整个项目的风格一致,具有更好的可阅读性和更强的可管理性。
相关文章推荐
- 逆向工程核心原理学习笔记(十八):栈帧5:设置add()函数的局部变量(x,y)
- 学习笔记6:《大型网站技术架构 核心原理与案例分析》之 万无一失:网站的高可用架构
- 学习笔记7:《大型网站技术架构 核心原理与案例分析》之 永无止境:网站的伸缩性架构
- 学习笔记8:《大型网站技术架构 核心原理与案例分析》之 固若金汤:网站的安全架构
- 逆向工程核心原理学习笔记(十):IA-32寄存器基本讲解
- 逆向工程核心原理学习笔记(十五):栈帧2:设置局部变量
- 逆向工程核心原理学习笔记(二十三):栈帧10:设置返回值,删除栈帧&main()函数终止
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(五):实战“打补丁方法”修改字符串
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(九):小端序标记法2
- 【《大型网站技术架构-核心原理与案例分析》学习笔记】大型网站架构演化(一)
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- 逆向工程核心原理学习笔记(二十五):abex'crackme #2初步破解
- Docker学习总结(29)——Docker核心技术与实现原理
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈
- 学习笔记2:《大型网站技术架构 核心原理与案例分析》之 大型网站架构演化
- 逆向工程核心原理学习笔记(二十四):abex'crackme #2 初探
- 逆向工程核心原理学习笔记(二十七):abex'crackme #2 破解算法