ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Security 原理

2021-07-25 22:04:02  阅读:120  来源: 互联网

标签:缓存 框架 Spring 拦截器 原理 Security 权限


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容器中,这样整个项目的风格一致,具有更好的可阅读性和更强的可管理性。

标签:缓存,框架,Spring,拦截器,原理,Security,权限
来源: https://blog.csdn.net/weixin_44104798/article/details/119088487

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有