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