一、Security Interceptor:
Security Interceptor组件是Spring Security中最重要的组件,它用来鉴定一个请求是否可以访问某个资源。包含一个抽象类AbstractSecurityInterceptor,以及两个具体的实现类FilterSecurityInterceptor 以及MethodSecurityInterceptor。
Security Interceptor包含preprocessing和post processing两个步骤。
在preprocessing中,首先确认要访问的资源是否有安全限制。如果没有,继续操作。如果有,Security Interceptor从当前的SecurityContext中获取Authentication对象。如果有必要,Authentication对象会被AuthenticationManager认证。认证通过后,AccessDecisionManager会被调用,决定认证后的对象是否可以访问资源。如果不允许,抛出AccessDeniedException。如果允许,而且配置了RunAsManager,Authentication对象被传递给RunAsManager。RunAsManager会返回一个新的Authentication对象,包含相同的principal,credentials,原有的authorities再加上当前的权限。新的Authentication对象被放入当前的SecurityContext。 这个过程结束后,Security Interceptor会创建一个新的包含Security Context和ConfigAttributes内容的InterceptorStatusToken。这个token会在postprocessing步骤中使用。
接着,会调用资源。
最后,开始postprocessing。
二、XML namespace
三、Filters and Filter Chain
Security Security使用过滤器链模型来实现应用安全。这个模型基于标准的servlet过滤器功能。
四、ConfigAttribute
五、Authentication对象
对象Authentication是一个抽象概念,它有几种不同实现,代表了登入系统的实体,通常为用户。
六、SecurityContext和SecurityContextHolder
SecurityContext用来存储当前线程的Authentication对象。SecurityContextHolder是用来访问SecurityContext的类。
七、AuthenticationProvider
AuthenticationProvider 是Authentication对象的主要入口。
八、AccessDecisionManager
AccessDecisionManager用来确定某一个authentication对象是否可以访问某一特定资源。
九、AccessDecisionVoter
十、UserDetailsService和AuthenticationUserDetailsService
UserDetailsService负责从用户应用中(例如内存,数据库)获取用户信息。
十一、UserDetails
UserDetails是系统的一个主要抽象,用来表示用户。
十二、ACL
十三、JSP Taglib