Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。[1]
1. core模块
认证Authentication代表了认证请求的token或者Authenticationmanager的authenticate方法处理的认证principal。一旦请求认证通过,SecurityContextHolder将Authentication保存到SecurityContext中。下面我们看一下Authentication的继承关系:
userDetails
context包:
Authentication存放在SecurityContext中。SecurityContextHolder将特定SecurityContext和当前执行线程联系到一起。此类提供了一些列静态方法来代理SecurityContextHoderStrategy实例。这个类的设计目的是使用便利方法为指定的jvm指明策略。有三种策略:MODE_GLOBAL、MODE_THREADLOCAL、MODE_INHERITABLETHREADLOCAL。分别对应:GlobalSecurityContextHolderStrategy、ThreadLocalSecurityContextHolderStrategy、InheritableThreadLocalSecurityContextHolderStrategy。
两种方法可以设置这些 策略。第一在系统属性中设置;第二是在使用前调用setStrategeName设置。如果上述方式都没有使用,默认情况下使用MODE_THREADLOCAL,MODE_THREADLOCAL是向后兼容的。
grantedAuthority
2.authentication模块
authenticationManager跟踪:
了解一下authentication的处理抽象接口AuthenticationProvider,它的集成层次关系
3. 授权模块
决策管理器Voter
小结:
参考文献:
[1]http://baike.baidu.com/link?url=hpt7PSOWpcOzJWxE75_H0WF8N2iXKpDAjGNQrDFsPkoDlyhNEE1lparIWzTsGV2-AyP3StHUXWesb2SCWc0SKK