目录
- 一、SecurityContextPersistenceFilter:
- 二、LogoutFilter:
- 三、AbstractAuthenticationProcessingFilter:
- 四、DefaultLoginPageGeneratingFilter:
- 五、BasicAuthenticationFilter:
- 六、SecurityAuthenticationFilter:
- 七、RememberMeAuthenticationFilter:
- 八、AnonymousAuthenticationFilter:
- 九、ExceptionTeanslationFilter:
- 十、SessionManagementFilter:
- 十一、FilterSecurityInterceptor:
Spring Security 提供了很多拦截器
一、SecurityContextPersistenceFilter:
是第一个执行的过滤器,有两个用途:
1.判断用的sission是否已经存在在SecurityContext,如果存在就取出来放到Security上下文中的SecurityContextHolder中,供其他部分使用,不存在就创建一个在存入SecurityContextHolder中
2.在所有过滤器执行完毕之后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果最后没有清空ThreadLocal会受到服务器机制的影响
二、LogoutFilter:
只处理注销请求,在发生注销请求时,销毁注销用户的sission,清空SecurityContextHolder,然后重定向到注销成功页面, 可以和关闭功能结合,在关闭时清空用户的cooike
三、AbstractAuthenticationProcessingFilter:
处理form登录的过滤器,与form登录有关的所有操作都是在这里进行的,登陆时判断用户名密码是否有效,有效的话就跳转到成功页面
四、DefaultLoginPageGeneratingFilter:
用于生成一个默认的登录页面,虽然有一些功能,但是太难看了,不能在实际项目中使用
五、BasicAuthenticationFilter:
用于Basic验证,与AbstractAuthenticationProcessingFilter类似但是验证方式不同
六、SecurityAuthenticationFilter:
用来包装客户的请求,目的实在原来请求的基础上对后续程序提供额外的数据,比如在remove user时直接提供当前登录的用户名之类的
七、RememberMeAuthenticationFilter:
实现RememberMe功能,当用户cookie中存在RememberMe标记时,会根据标记实现自动创建SecurityContext,授予相应权限 ,spring Security 中的RememberMe依赖cookie实现,当用户登录时选择使用RememberMe,就再用户登录后为用户生成一个唯一的标识,并将标识保存在cookie中
八、AnonymousAuthenticationFilter:
用于保证用户没有登录时,为用户分配匿名用户的权限,当然了,许多项目也会关闭掉匿名用户
九、ExceptionTeanslationFilter:
为了处理filterSecurityException抛出的异常,请求重定向到对应页面,或者返回对应的响应错误代码
十、SessionManagementFilter:
只要是为了防御会话伪造攻击,只要登录成功后销毁当前用户的当前sission,并从新生成一个sission就可以了
十一、FilterSecurityInterceptor:
用户的权限控制都包含在这个过滤器中,功能是:
1.如果用户尚未登陆就抛出尚未登录的异常
2.如果用户已经登录但是没有访问当前资源的权限,那么会抛出拒绝访问的异常
3.用户已登录也具有访问当前资源的权限就放行
这十一个拦截器是如何按照顺序执行的呢?
FilterChainProxy:这个类会按照顺序调用一组filter既能使用各自相应的工作,又能实现springioc得到其他依赖的资源