版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1 安全的實現(xiàn)安全wiki/wiki/security_and_authentication安全的保證時機(jī)是在調(diào)用public services的時候?qū)嵤┑?,訪問控制是通過元數(shù)據(jù)而不是硬編碼實現(xiàn)的,就是通過使用acegi和aop實現(xiàn)的。安全控制可以基于 :方法訪問;提供給方法的參數(shù);以及調(diào)用方法返回值。安全是通過一下五個關(guān)鍵服務(wù)完成的。the authentication service、the authority service、the ownable service、the permission service、the person servi
2、ce。訪問控制通過檢查當(dāng)前用戶授予的authority所擁有的permission和permission group允許或者禁止人員執(zhí)行操作一個特定對象的方法。例如nodeservice bean readproperties方法在調(diào)用方法之前檢查當(dāng)前用戶是否有讀當(dāng)前節(jié)點(diǎn)的屬性的訪問權(quán)限。在searchservice服務(wù)中,查詢的結(jié)果值返回用戶有read permission權(quán)限的節(jié)點(diǎn)(對返回結(jié)果進(jìn)行過濾)。對公共服務(wù)的訪問控制定義在 public-services-context.xml,每個服務(wù)都定義一個方法interceptor bean實現(xiàn)對方法調(diào)用的安全控制,通常這些定義在publi
3、c-services-security-context.xml。1.1 定義方法級別的安全在public-services-security-context.xml 中定義了支持基于acegi的security around method invocation。這個配置了兩個alfresco特定的bean:一個voter可以基于對于當(dāng)前操作參數(shù)授予當(dāng)前用戶的permission的方法調(diào)用,一個after invocation provider用來為返回值加上安全。方法訪問按照普通的acegi方式定義,但是附加一些內(nèi)容。一下?代表authority,#代表方法參數(shù)索引 *前置判斷是如下形式:ac
4、l_method.? access to the method is restricted to those with the given authority in alfresco. this could be a user name or group. dynamic authorities are not supported acl_node.#.* access control is restricted to users who have the the specified permission for the node on the identified argument. if
5、the argument is a noderef it will be used; if it is a storeref then the root node for the store will be used; if it is a childassociationref then the child node will be used. acl_parent.#.* access control is restricted to users who have the the specified permission for the parent of the node on the
6、identified argument. if the argument is a noderef the parent of the node will be used; if it is a childassociationref then the parent node will be used. role_. check for an acegi authority starting with role_ group_. check for an acegi authority starting with group_ if more than one acl_node.#.* or
7、acl_parent.#.* entry is present then all the permissions must be available for the method to execute. 后置判斷采取如下形式:after_acl_node.* similar to acl_node.#.* but the restriction applies to the return argument. the supported return types are childassociationref, fileinfo, noderef, storeref, resultset; co
8、llections and arrays of storeref, noderef, childassociationref, and fileinfo. after_acl_parent.* similar to acl_parent.#.* but the restriction applies to the return argument. the supported return types are childassociationref, fileinfo, noderef, storeref, resultset; collections and arrays of storere
9、f, noderef, childassociationref, and fileinfo. 2 authentication服務(wù)。1. alfresco把認(rèn)證了的用戶信息acegi的authentication對象放入當(dāng)前線程,這樣就不用在認(rèn)證了。在認(rèn)證之后會返回給客戶端一個ticket,每次調(diào)用的時候只需要和當(dāng)前線程的authentication進(jìn)行比較,不需要在進(jìn)行認(rèn)證一次浪費(fèi)資源;如果當(dāng)前線程沒有authentication信息的時候才會調(diào)用認(rèn)證組件進(jìn)行認(rèn)證;2. 對于用戶authentication信息以及生成的ticket信息都會放入緩存中,ticket是根據(jù)用戶名以及一些其他的用
10、戶信息生成的,這樣保證不會url假冒;3. 如果對authentication是怎么存在線程里面不理解的,可以參考acegi的context以及contextholder部分;4. 由于很多操作,對與當(dāng)前線程綁定的authentication人來說是無權(quán)做的,所以要更改authentication信息,從而使用具有更高權(quán)限的人來做,這個就是 string currentuser = authenticationutil.getrunasuser();authenticationutil.setrunasuser(currentuser);的用處,如果不理解,可以看看acegirunasmana
11、ger一部分內(nèi)容。2.1 子系統(tǒng)說明從alfresco3開始認(rèn)證部分是用來subsystem(子系統(tǒng))的概念,認(rèn)證系統(tǒng)是由子系統(tǒng)完成的。在alfresco中由于安全部分使用了acegi,所以認(rèn)證的處理也包含兩部分內(nèi)容,一部分是用于提供acegi的authenticationmanager,另外一部分就是認(rèn)證服務(wù)的接口authenticationservice,這兩部分的底層代碼相同,都是使用了subsystem。但是subsystem的實現(xiàn)不同,authenticationservice使用了 localauthenticationservice 屬性指名了使用localauthenticat
12、ionservice,這個從repository庫進(jìn)行認(rèn)證。而在authenticationdao中(用于acegi的authenticationmanager)沒有配置sourcebeanname屬性,這是因為在經(jīng)過authenticationservice認(rèn)證后,在acegi安全判斷的過程就不需要認(rèn)證了。2.2 總圖2.3 關(guān)于authenticationservice2.3.1 用戶登錄 這部分使用jsp頁面來完成的,用戶進(jìn)入系統(tǒng)后的首頁為context/index.jsp。/ get the start location as configured by the web-client
13、configwebapplicationcontext context = webapplicationcontextutils.getrequiredwebapplicationcontext(session.getservletcontext();configservice configservice = (configservice)context.getbean(webclientconfigservice);clientconfigelement configelement = (clientconfigelement)configservice.getglobalconfig().
14、getconfigelement(client);string location = configelement.getinitiallocation();authenticationservice authservice = (authenticationservice)context.getbean(authenticationservice);/ override with the users preference if they have oneuser user = (user)session.getattribute(authenticationhelper.authenticat
15、ion_user);if (user != null) usertransaction tx = (transactionservice)context.getbean(transactionservice).getusertransaction(); tx.begin();try authservice.validate(user.getticket(); / ensure construction of the facescontext before attemping a service call facescontext fc = faceshelper.getfacescontext
16、(request, response, application); string preference = (string)preferencesservice.getpreferences(fc).getvalue(start-location); if (preference != null) location = preference; mit(); catch (authenticationexception autherr) try tx.rollback(); catch (throwable tex) / expired ticket authenticationse
17、rvice unpauth = (authenticationservice)context.getbean(authenticationservice); unpauth.invalidateticket(unpauth.getcurrentticket(); unpauth.clearcurrentsecuritycontext(); catch (throwable e) try tx.rollback(); catch (throwable tex) elseusertransaction tx = (transactionservice)context.getbean(transac
18、tionservice).getusertransaction(); tx.begin();try authservice.authenticateasguest();personservice personservice = (personservice)context.getbean(personservice); noderef guestref = personservice.getperson(permissionservice.guest_authority); user = new user(authservice.getcurrentusername(), authservic
19、e.getcurrentticket(), guestref); session.setattribute(authenticationhelper.authentication_user, user); / ensure construction of the facescontext before attemping a service call facescontext fc = faceshelper.getfacescontext(request, response, application); string preference = (string)preferencesservi
20、ce.getpreferences(session).getvalue(start-location); if (preference != null) location = preference; session.removeattribute(authenticationhelper.authentication_user); mit(); catch (throwable e) try tx.rollback(); catch (throwable tex) if (request.getmethod().equalsignorecase(get) if (navigatio
21、nbean.location_myalfresco.equals(location) / clear previous location - fixes the issue adb-61 facescontext fc = faceshelper.getfacescontext(request, response, application); if (fc != null) navigationbean navigationbean = (navigationbean)faceshelper.getmanagedbean(fc, navigationbean); if (navigationb
22、ean != null) navigationbean.setlocation(null); navigationbean.settoolbarlocation(null); / send redirect response.sendredirect(request.getcontextpath() + /faces/jsp/dashboards/container.jsp); else response.sendredirect(request.getcontextpath() + /faces/jsp/browse/browse.jsp); / route webdav requestse
23、lse if (request.getmethod().equalsignorecase(propfind) | request.getmethod().equalsignorecase(options) response.sendredirect(request.getcontextpath() + /webdav/);這段代碼不難理解了就是獲取到公共服務(wù)的authenticationservice authservice = (authenticationservice)context.getbean(authenticationservice);注意這里bean的名字是大寫” authe
24、nticationservice”,這個bean的定義位于public-service-context.xml,是一個公共服務(wù)。因為這個服務(wù)是使用了aop對authenticationservice服務(wù)(定義在authentication-context.xml中)的封裝2.3.2 公共服務(wù)定義公共服務(wù)定義如下:位于配置文件public- services -context.xml org.alfresco.service.cmr.security.authenticationservice 2.3.3 關(guān)于目標(biāo)target這個步驟是使用配置服務(wù)讀取webclient的配置信息決定哪些文件支持
25、在線編輯。配置文件位于authentication-services-context.xml。 localauthenticationservice 這里使用了子系統(tǒng)subsystemchainingauthenticationservice,這里的applicationcontextmanager為authentication。認(rèn)證接口有3個實現(xiàn),一個是基本的實現(xiàn),另外一個是對基本實現(xiàn)的鏈?zhǔn)桨b,第三個就是使用鏈?zhǔn)阶酉到y(tǒng)對認(rèn)證進(jìn)行包裝。這個鏈?zhǔn)阶酉到y(tǒng)在提供更改認(rèn)證的方法的時候就是使用sourcebeanname配置的bean名字也就是名字為localauthenticationservice
26、的bean配置的實現(xiàn)。對于鏈?zhǔn)秸J(rèn)證則包含localauthenticationservice于其它配置的bean。默認(rèn)使用的是alfrescontlm下的localauthenticationservice,其實使用的就是存儲庫進(jìn)行認(rèn)證。2.3.4 截斷器 authenticationservice_transaction事物截斷器,很好理解了。定義如下:位于配置文件public- services -context.xml propagation_not_supported, readonly propagation_not_supported, readonly propag
27、ation_not_supported, readonly propagation_not_supported, readonly propagation_not_supported, readonly propagation_not_supported, readonly $server.transaction.mode.default auditmethodinterceptor審計追蹤截斷器,也很好理解了。定義如下:位于配置文件public-service-context.xml false exceptiontranslator異常處理截斷器,也很好理解
28、了。定義如下:位于配置文件public- services -context.xml false authenticationservice_security這個截斷器類使用的是ercept.method.aopalliance.methodsecurityinterceptor這個截斷器,如果不懂可以看acegi的文檔,這個截斷器是acegi的安全截斷器,用到了authenticationmanager、accessdecisionmanager、afterinvocationmanager等所有構(gòu)成安全部分的組件。因為在認(rèn)證服
29、務(wù)中不僅是包含了獲取用戶認(rèn)證信息的操作,還包括了創(chuàng)建認(rèn)證、更新認(rèn)證、設(shè)置認(rèn)證、刪除深證、封禁/解禁認(rèn)證、等這些只有管理員才能做的操作,所以這個截斷器是保證這些操作只有acl_method.role_administrator權(quán)限的人才能操作。定義如下:位于配置文件public-services-security-context.xml org.alfresco.service.cmr.security.authenticationservice.createauthentication=acl_method.role_administrator org.alfresco.service.cmr
30、.security.authenticationservice.updateauthentication=acl_allow org.alfresco.service.cmr.security.authenticationservice.setauthentication=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.deleteauthentication=acl_method.role_administrator org.alfresco.service.cmr.s
31、ecurity.authenticationservice.setauthenticationenabled=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.getauthenticationenabled=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.authenticationexists=acl_method.role_administrat
32、or org.alfresco.service.cmr.security.authenticationservice.getcurrentusername=acl_allow org.alfresco.service.cmr.security.authenticationservice.invalidateusersession=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.invalidateticket=acl_allow org.alfresco.service.
33、cmr.security.authenticationservice.getcurrentticket=acl_allow org.alfresco.service.cmr.security.authenticationservice.clearcurrentsecuritycontext=acl_allow org.alfresco.service.cmr.security.authenticationservice.iscurrentuserthesystemuser=acl_allow org.alfresco.service.cmr.security.authenticationser
34、vice.guestuserauthenticationallowed=acl_allow org.alfresco.service.cmr.security.authenticationservice.getdomains=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.getdomainsthatallowusercreation=acl_method.role_administrator org.alfresco.service.cmr.security.authe
35、nticationservice.getdomainsthatallowuserdeletion=acl_method.role_administrator org.alfresco.service.cmr.security.authenticationservice.getdomiansthatallowuserpasswordchanges=acl_method.role_administrator 2.4 關(guān)于acegi authenticationmanager2.4.1 配置文件位于authentication-services-context.xml 類net.sf
36、.viders.providermanageracegi的標(biāo)準(zhǔn)類了。 authenticatedauthenticationpassthroughprovideran authentication provider that just believes authentications bound to the local thread are valid if they are set as authenticated。authenticatedauthenticationpassthroughprovider,代碼很簡單了,就是直接通過認(rèn)證。位
37、于authentication-services-context.xml daoauthenticationprovideracegi的daoauthenticationprovider。易用了authenticationdao,參見authenticationdao。位于authentication-services-context.xml 關(guān)于accessdecisionmanager 關(guān)于afterinvocationmanager2.4.2 authenticationdaoacegi對認(rèn)證鏈的支持是通過一個authenticationman
38、ager管理多個authenticationprovider實現(xiàn)的,但是alfresco對它進(jìn)行了擴(kuò)展,使得daoauthenticationprovider本身也支持認(rèn)證連管理。定義位于authentication-services-context.xml org.alfresco.repo.security.authentication.mutableauthenticationdao 可以看到這個dao就支持鏈?zhǔn)秸J(rèn)證,這個bean的類為org.alfresco.repo.management.subsystems.chainingsubsystemproxyfactory,這個類是一個工
39、廠類,這個類與childapplicationcontextmanager類允許特定的接口代理給子應(yīng)用環(huán)境鏈。它是采用以下方法決定一個特殊的方法調(diào)用的目標(biāo)的,返回的代理會按照順序搜索應(yīng)用環(huán)境鏈并且選擇第一個具有必須得方法名或者沒有實現(xiàn)activatablebean接口,或者那些目標(biāo)是鏈中特殊成語的函數(shù)。詳見鏈?zhǔn)阶酉到y(tǒng)。 對于applicationcontextmanager bean的配置如下: $authentication.chain 這個bean的實現(xiàn)為defaultchildapplicationcontextmanager類,提供的defaultchain配置位于repository
40、.properties,為authentication.chain=alfrescontlm1:alfrescontlm。這個authentication manager包含了兩個applicationcontextfactory對應(yīng)了兩中認(rèn)證子系統(tǒng)環(huán)境分別是alfrescontlm1和alfrescontlm。在alfresco 3.1版本中實現(xiàn)了如下的認(rèn)證子系統(tǒng):alfresco、alfrescontlm、kerberos、ldap、passthru等,配置文件位于alfrescosubsystemsauthentication中。2.4.3 saltsource2.4.4 passwordencoder2.5 applicationcontextmanager之a(chǎn)uthentication配置文件位于authentication
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《數(shù)字化模具設(shè)計與工程實踐》教學(xué)大綱
- 教案概率大題(文) 文科高考匯編 大小題都有
- 玉溪師范學(xué)院《酒店管理》2021-2022學(xué)年第一學(xué)期期末試卷
- 弧度制課件中職
- 會考地理復(fù)習(xí)教案
- ECharts數(shù)據(jù)可視化 教案-教學(xué)設(shè)計 第1、2章 初識ECharts、折線圖和餅圖
- 《人力資源管理》課件
- 2023年洗面奶項目評估分析報告
- 2024屆河北省保定市重點(diǎn)高中高三下學(xué)期高考模擬訓(xùn)練(五)數(shù)學(xué)試題試卷
- 2024屆貴州省貴陽市清鎮(zhèn)北大培文學(xué)校高三第四次月考(4月)數(shù)學(xué)試題數(shù)學(xué)試題
- 素描入門基礎(chǔ)畫單選題100道及答案解析
- 期中模擬檢測(1-3單元)2024-2025學(xué)年度第一學(xué)期蘇教版一年級數(shù)學(xué)
- 四川省食品生產(chǎn)企業(yè)食品安全員理論考試題庫(含答案)
- 機(jī)織服裝生產(chǎn)中的質(zhì)量控制體系建設(shè)考核試卷
- 新能源汽車運(yùn)輸合作協(xié)議
- 2024年玻璃鋼通信管道項目可行性研究報告
- 2024年廣西安全員C證考試題庫及答案
- 期末測試卷(試題)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 《旅游大數(shù)據(jù)》-課程教學(xué)大綱
- 2024至2030年中國手機(jī)配件產(chǎn)業(yè)需求預(yù)測及發(fā)展趨勢前瞻報告
- 2024版細(xì)胞治療技術(shù)服務(wù)合同
評論
0/150
提交評論