我們知道 Spring Security 會将 DelegatingFilterProxy 插入到 Servlet Filter Chain 中,然後将要過濾的請求通過 FilterChainProxy 代理給匹配的 SecurityFilterChain;這些 SecurityFilterChain 中包含着真正做安全相關工作的 Filter 過濾器。
這些 Filter 過濾器中的一部分,它們的職責就是進行身份驗證,比如 UsernamePasswordAuthenticationFilter 和 BasicAuthenticationFilter。
UsernamePasswordAuthenticationFilter 是一個 AbstractAuthenticationProcessingFilter 的子類,實現了 attemptAuthentication 方法,沒有重寫其他方法。
從繼承關系可以看到 BasicHttpAuthenticationFilter 繼承自抽象類 OncePerRequestFilter。
public class BasicAuthenticationFilter extends OncePerRequestFilter
OncePerRequestFilter 的字面意思是:Once Per Request,即每個請求隻執行一次。
BasicAuthenticationFilter 的實現并不複雜,無非是從 Authorization header 中取出用戶名密碼,然後創建出 UsernameAuthenticationToken,接着調用 AuthenticationManager.authenticate() 方法。
BasicAuthenticationFilter 使用和 UsernamePasswordAuthenticationFilter 一樣的 AuthenticationProvider。
BasicAuthenticationFilter與 UsernamePasswordAuthenticationFilter 的區别在于認證之後的行為。
無論認證成功與否,BasicAuthenticationFilter 都不會做出重定向的響應。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!