Spring Security Filter 顺序

转自:https://www.w3cschool.cn/springsecurity/4j1s1iid.html 

 

Spring Security 的底层是通过一系列的 Filter 来管理的,每个 Filter 都有其自身的功能,而且各个 Filter 在功能上还有关联关系,所以它们的顺序也是非常重要的。

 

Filter 顺序

 

Spring Security 已经定义了一些 Filter,不管实际应用中你用到了哪些,它们应当保持如下顺序。

 

1ChannelProcessingFilter如果你访问的 channel 错了,那首先就会在 channel 之间进行跳转,如 http 变为 https

 

2SecurityContextPersistenceFilter这样的话在一开始进行 request 的时候就可以在 SecurityContextHolder 中建立一个 SecurityContext,然后在请求结束的时候,任何对 SecurityContext 的改变都可以被 copy HttpSession

 

3ConcurrentSessionFilter因为它需要使用 SecurityContextHolder 的功能,而且更新对应 session 的最后更新时间,以及通过 SessionRegistry 获取当前的 SessionInformation 以检查当前的 session 是否已经过期,过期则会调用 LogoutHandler

 

4、认证处理机制,如 UsernamePasswordAuthenticationFilterCasAuthenticationFilterBasicAuthenticationFilter 等,以至于 SecurityContextHolder 可以被更新为包含一个有效的 Authentication 请求。

 

5SecurityContextHolderAwareRequestFilter,它将会把 HttpServletRequest 封装成一个继承自 HttpServletRequestWrapper SecurityContextHolderAwareRequestWrapper,同时使用 SecurityContext 实现了 HttpServletRequest 中与安全相关的方法。

 

6JaasApiIntegrationFilter,如果 SecurityContextHolder 中拥有的 Authentication 是一个 JaasAuthenticationToken,那么该 Filter 将使用包含在 JaasAuthenticationToken 中的 Subject 继续执行 FilterChain

 

7RememberMeAuthenticationFilter如果之前的认证处理机制没有更新 SecurityContextHolder,并且用户请求包含了一个 Remember-Me 对应的 cookie,那么一个对应的 Authentication 将会设给 SecurityContextHolder

 

8AnonymousAuthenticationFilter,如果之前的认证机制都没有更新 SecurityContextHolder 拥有的 Authentication,那么一个 AnonymousAuthenticationToken 将会设给 SecurityContextHolder

 

9ExceptionTransactionFilter用于处理在 FilterChain 范围内抛出的 AccessDeniedException AuthenticationException,并把它们转换为对应的 Http 错误码返回或者对应的页面。

 

10FilterSecurityInterceptor,保护 Web URI,并且在访问被拒绝时抛出异常。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自huangqiqing123.iteye.com/blog/2413537