本文**:http://itblood.com/spring-security-security-framework.html
安全常識:
acegi介紹:
以宣告式方式為基於spring的web應用新增認證和授權控制
acegi體系結構:
***認證管理器、訪問控制管理器。
認證:***:
authenticationprocessingfilter
認證管理器:
authenticationmanager:
使用多個提供者實施認證:
如:daoauthenticationprovider
提供者使用userdetailsservice獲得認證使用者資訊。
url資源的授權:
***:
filtersecurityinterceptor:
(1)使用認證管理器判斷使用者是否通過身份認證。
(2)呼叫訪問控制器判斷使用者可否訪問url資源
(3)訪問控制管理器投票
(4)無權訪問,丟擲異常,否則開放。
認證管理器:同上
訪問控制管理器:
組織投票者投票,投票者依據物件定義源中定義的安全物件資訊來投票。
accessdecisionmanager有三類
業務方法的訪問授權:
***:
methodsecurityinterceptor:
其它相關過濾器:
exceptiontranslationfilter:異常轉換過濾器
異常轉換過濾器必須放在filtersecurityinterceptor之前。
發現異常,先判斷使用者是否已經登入,未登入,導向登入;已登入,導向出錯頁面。
request處理前,該過濾器從session中獲取authentication物件,在request完後
又把authentication物件儲存到session中供下次request使用,此filter必須於其他acegi filter前使用。
使得多個請求可以共享authentication物件
logoutfilter:
退出系統的善後工作,主要是將安全上下文從session中刪除。
anonymousprocessingfilter:
未登入使用者可以訪問的資源,使用使用者可以登入,訪問首頁等不需要保護的資源。
程式設計:
一、準備工作:
新增acegi的包
說明:filtertobeanproxy:**acegi的過濾器
filterchainproxy:將多個過濾組成乙個過濾器鏈
2、新增登入頁面:
3、在spring配置檔案中,新增配置資訊:
4、建表,並插入記錄
step1:
修改daoauthenticationprovider的配置,新增
注意,密碼鹽的值應該和資料庫中加密密碼時採用的密碼鹽一致。
step2:
對資料庫中的密碼加密
加密方式可用org.acegisecurity.providers.encoding.md5passwordencoder工具類:
比如:string encrtstr = mp.encodepassword("sdd", "tarena");
三、授權
url資源的訪問授權
1、修改spring配置檔案
(1)修改filterchainproxy,增加
anonymousprocessingfilter,exceptiontranslationfilter,filtersecurityinterceptor
(2)新增anonymousprocessingfilter配置
(3)修改authenticationmanager增加認證提供者
(4)新增filtersecurityinterceptor配置
(5)新增異常轉換過濾器
業務方法的訪問授權
1、修改spring配置檔案
(1)新增
methodsecurityinterceptor
orderprocessservice
2、在業務方法前,新增許可權控制標註
@secured()
表示層的相關標籤:
標籤能夠根據當前使用者是否擁有恰當許可權來決定顯示或隱藏web頁面的內容
1、jsp頁面引入
2、對需要控制輸出的內容,新增
ifallgranted——是乙個由逗號分隔的許可權列表,使用者必須擁有所有列出的許可權才列出;
ifanygranted——是乙個由逗號分隔的許可權列表,使用者必須至少擁有其中的乙個才列出;
ifnotgranted——是乙個由逗號分隔的許可權列表,使用者必須不擁有其中的任何乙個才列出。
新增安全通道功能
1、配置jboss伺服器,啟動https
step1:
生成keystore:
採用jdk的keytool命令即可
keytool -genkey -alias tomcat -keyalg rsa -keystore d:/tomcat.keystore
step2:
將tomcat.keystore複製到server/default/conf下
step3:
修改server/default/deploy/jboss-web.deployer/server.xml
注意,此處的windows是step1中keystore密碼
step4:
訪問https://localhost:8443進行測試
2、修改spring配置檔案:
step1:新增channelprocessingfilter,注意,其位置應是過濾器鏈中的第乙個。
step2:
convert_url_to_uppercase_before_comparison
/a/index.jsp.*/z=requires_secure_channel
/a/j_acegi_security_check.*/z=requires_secure_channel
/a.*/z=requires_insecure_channel
注意:channelprocessingfilter配置時,其filterinvocationdefinitionsource屬性,要使用
正規表示式風格的url路徑匹配,此時,需要新增乙個庫,則oro庫。
SpringSecurity認證流程
在之前的文章 springboot spring security 基本使用及個性化登入配置 中對springsecurity進行了簡單的使用介紹,基本上都是對於介面的介紹以及功能的實現。這一篇文章嘗試從原始碼的角度來上對使用者認證流程做乙個簡單的分析。在具體分析之前,我們可以先看看springse...
SpringSecurity使用技巧
1 鑑權處理頁通常包括四個方面的設定,分別是鑑權失敗 鑑權成功 未鑑權訪問 已鑑權但訪問了受保護許可權。如何自 定義這四類處理。鑑權失敗的預設處理頁面是 spring security login?login error 其預設處理類為 urlauthenticationfailurehandler...
spring security 標籤應用
應用標籤庫 taglib prefix security uri 是乙個流程控制標籤,能夠在滿足特定安全需求的條件下顯示它的內容體。它有三個互斥的引數 ifallgranted 是乙個由逗號分隔的許可權列表,使用者必須擁有所有列出的許可權時顯示 ifanygranted 是乙個由逗號分隔的許可權列表...