Spring Security3.0入門

edagarli發表於2014-03-11
在認識Spring Security之前,
所有的許可權驗證都混雜在業務邏輯中,使用者的每個操作可能都需要對使用者是否有該許可權進行判斷。類似這樣的驗證程式碼被分散在系統的許多地方,難以維護。


正如系統日誌,事務管理等這些系統級的服務一樣,我們應該將它作為系統的一個單獨的“切面”進行管理,以達到業務邏輯與系統級的服務真正分離的目。

Spring Security將系統的安全邏輯從業務中分離出來。
Spring Security提供有若干個過濾器,它們能夠攔截Servlet請求,並將這些請求轉給認證和訪問的決策管理器處理,從而增強安全性。


Spring Security3.0簡介

Spring Security,這是一種基於Spring AOP和Servlet過濾器的安全框架。

它提供全面的安全性解決方案,同時在 Web 請求級和方法呼叫級處理身份確認和授權。

它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了依賴注入(DI,Dependency Injection)和AOP(面向切面)技術



配置 web.xml 檔案 



服務啟動時載入所有以applicationContext開頭的xml檔案
<context-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>
classpath:applicationContext*.xml
</param-value>  
</context-param> 
<!--Spring容器啟動監聽器-->
<listener>  
<listener-class>  
     org.springframework.web.context.ContextLoaderListener  
</listener-class>  
</listener> 


<!—代理過濾器的類,它就相當於是一個入口,web容器啟動的時候,由它到spring容器中啟動 spring Security 需要的過濾器鏈。-->





配置applicationContext.xml




配置applicationContext.xml





   auto-config屬性值為true,表示配置SpringSecurity自帶的所有過濾器。


intercept-url  pattern定義要攔截的訪問地址,/**表示攔截src下所有訪問路徑。


access 屬性表示可以訪問此路徑的角色。


那麼 ROLE_USER角色 在哪裡定義呢?




如果使用者名稱為 user,密碼為 user 的使用者成功登入了,它的角色是 ROLE_USER ,那麼他可以訪
問規定的資源。 authorites屬性表示設定固定的角色


編寫首頁 

目前為止,專案中只有一個 index.jsp 
在這個頁面上只需要寫一句話 







將專案部署到 web 伺服器中,然後訪問首頁 index.jsp,我們發現首頁並沒有出現,而是跳轉到了 一個登入頁面上。
因為專案剛啟動,第一次訪問的時候,沒有任何使用者登入,而在配置檔案中我們攔截的是所有的請求,所以第一次請求被攔截了。 




輸入剛才在配置檔案中的配置 
使用者名稱:user,密碼:user
提交後,發現能夠正確的轉到首頁 

那個登入頁面哪裡來的?



當有請求來到的時候,Spring Security 框架開始檢查要訪問的資源是否有許可權訪問,如果當前登入使用者無許可權訪問或者當前根本就沒有使用者登入,則 Spring Securtiy 框架就會自動生成一個 登入頁面。 





當在登入頁面進行了正確的登入後,Spring Security會自動進行登入驗證,如果成功登入,將使用者資訊放到 session 中,然後轉到先前請求的頁面上。




我們可以在 index 中將 session 中的 key—value 列印出來,看看 Spring Security 將使用者資訊如何放到 session 中的: 






相關文章