Spring Security提供了不少过滤器,它们拦截Servlet请求,并将这些请求转交给认证处理过滤器和访问角色处理过滤器,认证用户身份和用户权限,以保证web资源的安全性web
SecurityContextPersistenceFilter安全
用途:位于过滤器的顶端。
cookie
1:在执行其它过滤器以前,判断用户的session中是否已经存在了一个SecurityContext上下文,若是存在,就放入SecurityContextHolder中;不然则建立。session
2:在执行完其它的过滤器以后,清空SecurityContextHolder中的内容,由于SecurityContextHolder是基于ThreadLocal的。ide
LogoutFilterspa
用途:用于注销请求。orm
1:在用户发送注销请求时,销毁用户的session,并清空SecurityContextHolder,重定向到注销成功页面。blog
2:与记住密码功能结合的时候,能够清空用户的cookie。
资源
AbstractAuthenticationProcessingFilterget
用途:处理Form登陆过滤器,与form登陆相关的全部请求都在此处理的。
1:经过用户登陆的用户名和密码是否有效,若是成功就跳转到成功页面。
DefaultLoginPageGeneratingFilter
用途:用来生成一个默认的登陆页面。(几乎不用)
BasicAuthenticationFilter
用途:用来作Basic认证的。
SecurityContextHolderAwareRequestFilter
用途:包装用户的请求,目的是为后面的程序提供额外的数据。
RememberMeAuthenticationFilter
用途:记住密码功能。依赖Cookie实现。
AnonymousAuthenticationFilter
用途:保证操做的统一性,当用户没有登陆时,用户操做页面的时候为用户默认分配匿名用户的权限。
ExceptionTranslationFilter
用途:针对于过滤器抛出的异常,而后将请求重定向到对应页面或错误代码,在项目中咱们都会对其进行处理。
SessionManagementFilter
用途:防护回话伪造***,主要在用户登陆成功以后,销毁用户的当前session,并从新生成一个session。
FilterSecurityInterceptor
用途:用户的权限控制都包含在这个过滤器中,
1:若是用户还没有登陆,则抛出还没有认证的异常。
2:若是用户已经登陆,可是没有访问当前资源的权限,则抛出拒绝访问的异常。
3;若是用户已经登陆,有访问当前资源的权限,则放进。
上面这些拦截器是按怎样的顺序执行的呢?FilterChainProxy
安装顺序来调用一组Filter,使这些Filter既能完成认证受权的本职工做,又能享用Spring IOC的功能。