Spring Security 學習總結


  Spring Security

  Spring Security是基於Spring提供聲明式安全保護的安全性框架。Spring Security提供了完整的安全性解決方案,能夠在Web請求級別和方法調用級別處理身份認證和授權。

  Spring Security從兩個角度來解決安全性問題:

  1. 使用Servlet規范中的Filter保護Web請求並限制URL級別的訪問;
  2. 使用Spring AOP保護方法調用——借助於動態代理和使用通知,確保只有具備適當權限的用戶才能訪問安全保護的方法。

  Spring Security被分為了11個模塊:

模塊 描述
ACL(access control list) 支持通過訪問控制列表(ACL)為域對象提供安全性
切面(Aspects) 當使用Spring Security注解時,會使用基於AspectJ的切面,而非標准的AOP
CAS(Central Authentication Service)客戶端 提供與Jasig的中心認證服務(CAS)進行集成的功能
配置(Configuratiion)* 包含通過XML和Java配置Spring Security的功能支持
核心(Core)      * 提供Spring Security基本庫
加密(Cryptography) 提供了加密和密碼編碼的功能
LDAP 支持基於LDAP進行認證
OpenID 支持使用OpenID進行集中式認證
Remoting 提供了對Spring Remoting的支持
標簽庫(Tag Library) Spring Security的JSP標簽庫
Web 提供了Spring Security基於Filter的Web安全性支持

  過濾Web請求

  Spring Security基於DelegatingFilterProxy實現其安全性需要的過濾功能。DelegatingFilterProxy是一個特殊的Servlet Filter,主要將工作委托給一個javax.servlet.Filter實現類,實現類將作為一個bean注冊在Spring應用的上下文中。

  Java配置方式,配置DelegatingFilterProxy:

public class SecurityWebInitializer extends 
                 AbstractSecurityWebApplicationInitializer {}    
  AbstractSecurityWebApplicationInitializer 實現了 WebApplicationInitializer ,因此將被Spring容器並注冊 DelegatingFilterProxy。實現類可以重載抽象類中的appendFilters()或insertFilters()方法來注冊自己選擇的Filter,但如果只是注冊DelegatingFilterProxy的話,不需要重載任何方法。
完成配置DelegatingFilterProxy后,它就會攔截發往應用中的請求,並將請求委托給ID為springSecurityFilterChain的Bean。
  springSecurityFilterChain本身是另一個特殊的Filter,也叫 FilterChainProxy。它可以鏈接任意一個或多個其他的Filter。Spring Security依賴一系列Servlet Filter來提供不同的安全特性。實際開發中,只需要顯式聲明springSecurityFilterChain以及它所鏈接的Filter即可。啟動Web安全性時將自動創建。    

簡單的安全性配置--基於Java配置
 
@Configuration
@EnableWebSecurity // 啟用Web安全性
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 簡單的默認配置:指定該如何保護HTTP請求
     * @param http
     * @throws Exception
     */
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin().and()
                .httpBasic();
    }

}

  @EnableWebSecurity注解將會啟用Web安全功能,ps:Spring Security必須配置在一個實現了WebSecurityConfigurer的bean中,或者擴展 WebSecurityConfigurerAdapter 。

 具體的Web安全細節,將通過重寫WebSecurityConfigurerAdapter 中的一個或多個方法來實現,如其中的三個configure()方法來配置Web安全性,具體通過傳遞的參數設置行為。
重寫WebSecurityConfigurerAdapter的configure()方法
方法 描述
configure(WebSecurity) 通過重寫,配置Spring Security的Filter鏈
configure(HttpSecurity) 通過重寫,配置如何通過攔截器保護請求
configure(AuthenticationManagerBuilder) 通過重寫,配置user-detail服務

示例代碼中進行了簡單的默認配置,指定如何保護HTTP請求,以及客戶端認證用戶的方案。調用authorizeRequests()和anyRequest().authenticated()就會要求所有進入應用的HTTP請求都要進行認證。formLogin()和httpBasic()則配置了對表單登錄和HTTP Basic方式的支持。
注意:因為沒有重寫configure(AuthenticationManagerBuilder)方法,所以沒有用戶存儲支撐認證過程。進而所有的請求都要認證,且沒人可成功登陸。
后續需要的配置如下:
  1. 配置用戶存儲
  2. 指定具體需要認證的請求及所需權限
  3. 提供自定義登陸頁面
  4. 基於安全限制,設置選擇性地在Web視圖上顯示特定的內容

user-detail服務 **

  優勢:內置了多種常見的用戶存儲場景,如內存、關系型數據庫以及LDAP,能夠基於各種數據存儲來認證用戶。
  



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM