目录

  • 一、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得到其他依赖的资源