Spring Security的核心拦截器

1. HttpSessionContextIntegrationFilterspring

位于过滤器顶端,第一个起做用的过滤器。安全

用途一,在执行其余过滤器以前,率先判断用户的session中是否已经存在一个SecurityContext了。若是存在,就把SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其余部分使用。若是不存在,就建立一个SecurityContext出来,仍是放到SecurityContextHolder中,供Spring Security的其余部分使用。服务器

用途二,在全部过滤器执行完毕后,清空SecurityContextHolder,由于SecurityContextHolder是基于ThreadLocal的,若是在操做完成后清空ThreadLocal,会受到服务器的线程池机制的影响。cookie

 

2. LogoutFiltersession

只处理注销请求,默认为/j_spring_security_logout。ide

用途是在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,idea

而后重定向到注销成功页面。能够与rememberMe之类的机制结合,在注销的同时清空用户cookie。spa

 

3. AuthenticationProcessingFilter线程

处理form登录的过滤器,与form登录有关的全部操做都是在此进行的。orm

默认状况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登录后的提交地址

此过滤器执行的基本操做时,经过用户名和密码判断用户是否有效,若是登陆成功就跳转到成功页面

(多是登录以前访问的受保护页面,也多是默认的成功页面),若是登陆失败,就跳转到失败页面。

 

4. DefaultLoginPageGeneratingFilter

此过滤器用来生成一个默认的登陆页面,默认的访问地址为/spring_security_login,

这个默认的登陆页面虽然支持用户输入用户名,密码,也支持rememberMe功能,可是由于太难看了,

只能是在演示时作个样子,不可能直接用在实际项目中。

 

5. BasicProcessingFilter

此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter相似,只是验证的方式不一样。

 

6. SecurityContextHolderAwareRequestFilter

此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。好比getRemoteUser()时直接返回当前登录的用户名之类的。

 

7. RememberMeProcessingFilter

此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登录,并建立SecurityContext,授予对应的权限。

 

8. AnonymousProcessingFilter

为了保证操做统一性,当用户没有登录时,默认为用户分配匿名用户的权限。

 

9. ExceptionTranslationFilter

此过滤器的做用是处理中FilterSecurityInterceptor抛出的异常,而后将请求重定向到对应页面,或返回对应的响应错误代码

 

10. SessionFixationProtectionFilter

防护会话伪造攻击。有关防护会话伪造的详细信息

 

11. FilterSecurityInterceptor

用户的权限控制都包含在这个过滤器中。

功能一:若是用户还没有登录,则抛出AuthenticationCredentialsNotFoundException“还没有认证异常”。

功能二:若是用户已登陆,可是没有访问当前资源的权限,则抛出AccessDeniedException“拒绝访问异常”。

功能三:若是用户已登陆,也具备访问当前资源的权限,则放行。

全部的过滤器都会实现SpringSecurityFilter安全过滤器。。。

 

image