您的位置:首页 > 编程语言 > Java开发

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容器中,这样整个项目的风格一致,具有更好的可阅读性和更强的可管理性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐