Spring Security實現(xiàn)登錄認證和權限控制

常見的安全管理框架包括Shiro、Spring Security,Shiro輕量級,但Spring Security易于Spring Cloud整合。Spring Security除了認證和授權兩個核心功能外,對常見的網(wǎng)絡攻擊也提供了防御策略。

Spring Security中,認證、授權等功能都是基于過濾器來完成的。這些過濾器按照既定的優(yōu)先級排序,最終形成一個過濾器鏈。默認過濾器鏈并不是直接放在Web項目的原生過濾器鏈中,而是通過一個FilterChainProxy來統(tǒng)一管理。

簡化流程圖


認證

基本組件:AuthenticationManager、ProviderManager、AuthenticationProvider、AbstractAuthenticationProcessingFilter

可以同時存在多個ProviderManager,即多種認證方式。實際執(zhí)行認證方法的類是AuthenticationProvider,UserDetailsService的loadUserByUserName方法加載用戶信息,用戶信息會被存儲到SecurityContextHolder中,在進行權限控制時可以在上下文中獲取用戶擁有的權限。

授權

參考AbstractSecurityInterceptor的源碼,SecurityMetadataSource加載所有的權限到內(nèi)存,AccessDecisionManager決策用戶是否有訪問權限。

過濾器鏈分析

SecurityBuilder build方法構(gòu)建過濾器鏈

SecurityBuilder 的實現(xiàn)類HttpSecurity的主要作用是用來構(gòu)建一條過濾器鏈,也就是構(gòu)建一個DefaultSecurityFilterChain對象。一個DefaultSecurityFilterChain對象包含一個路徑匹配器和多個Spring Security過濾器,HttpSecurity中通過收集各種各樣的xxxConfigurer, 將Spring Security過濾器對應的配置類收集起來,并保存到父類AbstractConfiguredSecurityBuilder 的configures變量中,在后續(xù)的構(gòu)建過程中,再將這些xxxConfigurer構(gòu)建為具體的Spring Security過濾器,同時添加到HttpSecurity的filters對象中。FilterChainProxy統(tǒng)一管理執(zhí)行這些過濾器。

相比于HttpSecurity,WebSecurity是在一個更大的層面上去構(gòu)建過濾器。一個HttpSecurity對象可以構(gòu)建一個過濾器鏈, 也就是一個 DefaultSecurityFilterChain對象,而一個項目中可以存在多個HttpSecurity對象,也就可以構(gòu)建多個DefaultSecurityFilterChain過濾器鏈。WebSecurity負責將 HttpSecurity所構(gòu)建的DefaultSecurityFilterChain對象(可能有多個),以及其他一些需要忽略的請求,再次重新構(gòu)建為一個 FilterChainProxy對象,同時添加上HTTP防火墻。



參考 《深入淺出Spring Security》

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容