亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

acegi"安全控制"的設置-1

系統 1781 0

acegi安全系統,是個用于spring framework的安全框架,能夠和目前流行的web容器無縫集成。他使用了spring的方式提供了安全和認證安全服務,包括使用bean context,攔截器和面向接口的編程方式。因此,acegi安全系統能夠輕松地適用于復雜的安全需求。
安全涉及到兩個不同的概念,認證和授權。前者是關于確認用戶是否確實是他們所宣稱的身份。授權則是關于確認用戶是否有允許執行一個特定的操作。
在acegi安全系統中,需要被認證的用戶,系統或代理稱為"principal"。acegi安全系統和其他的安全系統不同,他并沒有角色和用戶組的概念。

acegi系統設計

關鍵組件

acegi安全系統包含以下七個關鍵的功能組件:
lauthentication對象,包含了principal,credential和principal的授權信息。同時還能包含關于發起認證請求的客戶的其他信息,如ip地址。
2contextholder對象,使用threadlocal儲存authentication對象的地方。
3authenticationmanager,用于認證contextholder中的authentication對象。
4accessdecissionmanager,用于授權一個特定的操作。
5runasmanager,當執行特定的操作時,用于選擇性地替換authentication對象。
6secure object攔截器,用于協調authenticationmanager,accessdecissionmanager,runasmanager和特定操作的執行。
7objectdefinitionsource,包含了特定操作的授權定義。

這七個關鍵的功能組件的關系如下圖所示(圖中灰色部分是關鍵組件):


安全管理對象

acegi安全系統目前支持兩類安全管理對象。
第一類的安全管理對象管理aop alliance的methodinvocation,研發人員能用他來保護spring容器中的業務對象。為了使spring管理的bean能作為 methodinvocation來使用,bean能通過proxyfactorybean和beannameautoproxycreator來管理, 就像在spring的事務管理相同使用。
第二類是filterinvocation。他用過濾器(filter)來創建,并簡單地包裝了http的 servletrequest,servletresponse和filterchain。filterinvocation能用來保護http資源。通 常,研發人員并不必了解他的工作機制,因為他們只需要將filter加入web.xml,acegi安全系統就能工作了。

安全設置參數

每個安全管理對象都能描述數量不限的各種安全認證請求。例如,methodinvocation對象能描述帶有任意參數的任意方法的調用,而filterinvocation能描述任意的http url。
acegi安全系統需要記錄應用于每個認證請求的安全設置參數。例如,對于bankmanager.getbalance(int accountnumber)方法和bankmanager.approveloan(int applicationnumber)方法,他們需要的認證請求的安全設置非常不相同。
為了保存不同的認證請求的安全設置,需要使用設置參數。從實現的視角來看,設置參數使用configattribute接口來表示。acegi安全系統提 供了configattribute接口的一個實現,securityconfig,他把設置參數保存為一個字符串。
configattributedefinition類是configattribute對象的一個簡單的容器,他保存了和特定請求相關的configattribute的集合。
當安全攔截器收到一個安全認證請求時,需要決定應用哪一個設置參數。換句話說,他需要找出應用于這個請求的 configattributedefinition對象。這個查找的過程是由objectdefinitionsource接口來處理的。這個接口的主 要方法是public configattributedefinition getattributes(object object),其中object參數是個安全管理對象。因為安全管理對象包含有認證請求的周詳信息,所以objectdefinitionsource 接口的實現類能從中獲得所需的周詳信息,以查找相關的configattributedefiniton對象。

acegi怎么工作

為了說明acegi安全系統怎么工作,我們設想一個使用acegi的例子。通常,一個安全系統需要發揮作用,他必須完成以下的工作:
l首先,系統從客戶端請求中獲得principal和credential;
2然后系統認證principal和credential信息;
3如果認證通過,系統取出principal的授權信息;
4接下來,客戶端發起操作請求;
5系統根據預先設置的參數檢查principal對于該操作的授權;
6如果授權檢查通過則執行操作,否則拒絕。

那么,acegi安全系統是怎么完成這些工作的呢?首先,我們來看看acegi安全系統的認證和授權的相關類圖:

圖中綠色部分是安全攔截器的抽象基類,他包含有兩個管理類,authenticationmanager和accessdecisionmanager, 如圖中灰色部分。authenticationmanager用于認證contextholder中的authentication對象(包含了 principal,credential和principal的授權信息);accessdecissionmanager則用于授權一個特定的操作。
下面來看一個methodsecurityinterceptor的例子:
<bean id="bankmanagersecurity"
class="net.sf.acegisecurity.intercept.method.methodsecurityinterceptor">
<property name="validateconfigattributes">
<value>true</value>
</property>
<property name="authenticationmanager">
<ref bean="authenticationmanager"/>
</property>
<property name="accessdecisionmanager">
<ref bean="accessdecisionmanager"/>
</property>
<property name="objectdefinitionsource">
<value>
net.sf.acegisecurity.context.bankmanager.delete*=
role_supervisor,run_as_server
net.sf.acegisecurity.context.bankmanager.getbalance=
role_teller,role_supervisor,banksecurity_customer,run_
</value>
</property>
</bean>

上面的設置文件中,methodsecurityinterceptor是abstractsecurityinterceptor的 一個實現類。他包含了兩個管理器,authenticationmanager和accessdecisionmanager。這兩者的設置如下:

<bean id="authenticationdao" class="net.sf.acegisecurity.providers.dao.jdbc.jdbcdaoimpl">
<property name="datasource"><ref bean="datasource"/></property>
</bean>
<bean id="daoauthenticationprovider"
class="net.sf.acegisecurity.providers.dao.daoauthenticationprovider">
<property name="authenticationdao"><ref bean="authenticationdao"/></property>
</bean>
<bean id="authenticationmanager" class="net.sf.acegisecurity.providers.providermanager">
<property name="providers">
<list><ref bean="daoauthenticationprovider"/></list>
</property>
</bean>

<bean id="rolevoter" class="net.sf.acegisecurity.vote.rolevoter"/>
<bean id="accessdecisionmanager" class="net.sf.acegisecurity.vote.affirmativebased">
<property name="allowifallabstaindecisions"><value>false</value></property>
<property name="decisionvoters">
<list><ref bean="rolevoter"/></list>
</property>
</bean>

準備工作做好了,目前我們來看看acegi安全系統是怎么實現認證和授權機制的。以使用http basic認證的應用為例子,他包括下面的步驟:
1.用戶登錄系統,acegi從acegisecurity.ui子系統的安全攔截器(如basicprocessingfilter)中得到用戶的登 錄信息(包括principal和credential)并放入authentication對象,并保存在contextholder對象中;
2.安全攔截器將authentication對象交給authenticationmanager進行身份認證,如果認證通過,返回帶有 principal授權信息的authentication對象。此時contextholder對象的authentication對象已擁有 principal的周詳信息;
3.用戶登錄成功后,繼續進行業務操作;
4.安全攔截器(bankmanagersecurity)收到客戶端操作請求后,將操作請求的數據包裝成安全管理對象(filterinvocation或methodinvocation對象);
5.然后,從設置文件(objectdefinitionsource)中讀出相關的安全設置參數configattributedefinition;
6.接著,安全攔截器取出contextholder中的authentication對象,把他傳遞給authenticationmanager進行身份認證,并用返回值更新contextholder的authentication對象;
7.將authentication對象,configattributedefinition對象和安全管理對象(secure object)交給accessdecisionmanager,檢查principal的操作授權;
8.如果授權檢查通過則執行客戶端請求的操作,否則拒絕;

accessdecisionvoter

注意上節的accessdecisionmanager是個affirmativebased類,他對于用戶授權的投票策略是,只要通過其中的一個授權投 票檢查,即可通過;他的allowifallabstaindecisions屬性值是false,意思是如果所有的授權投票是都是棄權,則通不過授權檢 查。
acegi安全系統包括了幾個基于投票策略的accessdecisionmanager,上節的rolevoter就是其中的一個投票策略實現,他是 accessdecisionvoter的一個子類。accessdecisionvoter的具體實現類通過投票來進行授權決 策,accessdecisionmanager則根據投票結果來決定是通過授權檢查,還是拋出accessdeniedexception例外。
accessdecisionvoter接口共有三個方法:
public int vote(authentication authentication, object object, configattributedefinition config);
public boolean supports(configattribute attribute);
public boolean supports(class clazz);
其中的vote方法返回int返回值,他們是accessdecisionvoter的三個靜態成員屬性:access_abstain,,access_denied和access_granted,他們分別是棄權,否決和贊成。
acegi安全系統中,使用投票策略的accessdecisionmanager共有三個具體實現類:affirmativebased、 consensusbased和unanimousbased。他們的投票策略是,affirmativebased類只需有一個投票贊成即可通 過;consensusbased類需要大多數投票贊成即可通過;而unanimousbased類需要所有的投票贊成才能通過。
rolevoter類是個acegi安全系統accessdecisionvoter接口的實現。如果configattribute以role_開 頭,rolevoter則進行投票。如果grantedauthority的getautority方法的string返回值匹配一個或多個以role_ 開頭的configattribute,則投票通過,否則不通過。如果沒有以role_開頭的configattribute,rolevoter則棄 權。

安全攔截器

攔截器怎么工作
methodinvocation攔截器
filterinvocation攔截器

認證

認證請求
認證管理器
authentication provider

授權

access decision manager
voting decision manager
授權管理推薦

contextholder的用戶接口

用戶接口目標
http會話認證
http basic認證

acegi"安全控制"的設置-1


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品久久久久久久久久久久 | 国产1769一七六九视频在线 | 免费观看一级欧美在线视频 | 色偷偷7777www | 乱人伦99久久 | 亚洲国产精品成 | 国产精品国产福利国产秒拍 | 亚洲国产女人aaa毛片在线 | 欧美日韩综合在线视频免费看 | 日本人69视频页码jlzz | 狠狠色丁香婷婷综合小时婷婷 | 国产日韩精品欧美在线ccc | 黄片毛片在线观看 | 97中文字幕在线 | 日本欧美在线视频 | 香蕉视频在线网站 | 99九九精品视频 | 99视频在线看 | 女性一级全黄生活片在线播放 | 99热这里只有精品3 99热这里只有精品4 | 天天操天天爽天天射 | 欧美日韩图区 | 久久久精品免费热线观看 | 91亚洲国产在人线播放午夜 | 国产精品999 | 91欧美在线视频 | 久久久久久久久久综合情日本 | 亚洲精品综合一二三区在线 | 亚洲精品国产一区二区三区四区 | 老司机日日摸夜夜摸精品影院 | 日韩中文字幕久久精品 | 中文字幕一区二区三区免费视频 | 岛国精品在线观看 | 一本大道香蕉久在线不卡视频 | 亚洲国产精品一区二区不卡 | 图片亚洲va欧美va国产综合 | 免费看特级毛片 | 久久视频这里只有精品35 | 国产波波社区精品视频 | 日本特交大片免费观看 | 精品久久香蕉国产线看观看亚洲 |