SecurityContextPersistenceFilter位于过滤器顶端,是第一个起作用的过滤器
其作用:
1.执行其他过滤器之前率先判断用户的session是否存在Spring Security上下文的SecurityContext
如果存在,则取出来放入SecurityContextHolder,供Spring Security其他部分使用;
如果不存在,则创建一个,同样放入SecurityContextHolder中;
2.在所有过滤器执行完毕以后,清空SecurityContextHolder里的内容。因为SecurityContextHolder是基于THREADLOCAL,如果服务结束没有清空threadlocal,会受到服务器的线程池机制的影响
ps:ThreadLocal是线程内共享,线程间互斥
LogoutFilter只处理注销请求,用途是在用户发送注销请求时,销毁用户的session,清空SecurityContextHolder的内容,然后重定向到注销成功页面,可以与remember me相结合,销毁用户的cookie
AbstractAuthenticationProcessingFilter处理from登录处理器,通过用户名和密码判断用户是否有效
DefaultLoginPageGeneratingFilter用来生成默认的登录页面
BasicAuthenticationFilter用来进行basic验证,与AbstractAuthenticationProcessingFilter类似,除了验证方式
SecurityContextHolderAwareRequestFilter用来包装用户的请求,目的是在原来的请求的基础上,为后续程序提供一下额外的数据。
RememberMeAuthenticationFilter实现的是remember me功能,当用户的cookie存在remember me的标记时,它会根据标记自动实现用户登录,并创建SecurityContext,授予对应的权限;依赖cookie实现,当用户登录成功以后,会生成唯一的标识保存到用户那边
ExceptionTranslationFilter处理FilterSecurityInterceptor抛出的异常,然后将请求重定向;
SessionManagementFilter为防御会话比照攻击
FilterSecurityInterceptor用户的权限控制都包含在这
作用:
1.如果用户尚未登录,抛出尚未登录的异常
2.如果用户已登录,但是没有资源访问权限,抛出拒绝请求的异常
3.如果用户已登录,又有权限,则放行