動態(tài)Proxy與Java ACL用戶訪問控制機(jī)制實現(xiàn)
粗粒度控制:可以規(guī)定訪問整個對象或?qū)ο笕旱哪硞€層,而細(xì)粒度控制則總是在方法或?qū)傩詫舆M(jìn)行控制,比如:
允許一個文件為只讀是屬于粗粒度控制,而允許對這個文件某行有寫操作則屬于細(xì)粒度控制。
一個好的用戶控制機(jī)制當(dāng)然既允許粗粒度也允許細(xì)粒度控制,在Jive中我們看到是使用Proxy來達(dá)到這個目的,但是我們也發(fā)現(xiàn),由于需要對每個類都要進(jìn)行細(xì)粒度控制,所以必然對每個類都要做一個Proxy類,這樣帶來了很多Proxy類,如ForumProxy ForumThreadProxy ForumFactoryProxy等,無形增加了系統(tǒng)復(fù)雜性。
使用動態(tài)Proxy可以很好的解決這個問題。再結(jié)合java.security.acl的ACL機(jī)制,我們就可以靈活地實現(xiàn)粗粒度和細(xì)粒度的雙重控制。
當(dāng)一個用戶login后,我們就要在內(nèi)存中為其建立相應(yīng)的授權(quán)訪問機(jī)制,使用java.security.acl可以很方便的建立這樣一個安全系統(tǒng)。
首先任何一個對象都應(yīng)該有個基本屬性:擁有者 或擁有者所屬組(Windows中每個目錄安全描述符都由4部分構(gòu)成:對象的創(chuàng)建者、對象所屬的組、自由存取控制和系統(tǒng)存取控制)。
1. Java acl開始第一步是建立一個主體 Principal,其中SecurityOwner是主體的擁有者: private static final Principal _securityOwner = new PrincipalImpl('SecurityOwner');
2. 當(dāng)用戶login進(jìn)來時,他帶有兩個基本數(shù)據(jù):訪問密碼和他要訪問的對象ApplicationName。首先驗證用戶名和密碼,然后從數(shù)據(jù)庫中取出其權(quán)限數(shù)據(jù),建立Permission,這里使用Feature繼承了Permission,在Feature中定義了有關(guān)權(quán)限的細(xì)節(jié)數(shù)據(jù)(如讀 寫 刪)。
相關(guān)文章:
1. ASP實現(xiàn)加法驗證碼2. 基于javaweb+jsp實現(xiàn)企業(yè)財務(wù)記賬管理系統(tǒng)3. ASP腳本組件實現(xiàn)服務(wù)器重啟4. Python獲取抖音關(guān)注列表封號賬號的實現(xiàn)代碼5. python+opencv實現(xiàn)移動偵測(幀差法)6. Python Scrapy多頁數(shù)據(jù)爬取實現(xiàn)過程解析7. jsp+mysql實現(xiàn)網(wǎng)頁的分頁查詢8. Python的Django框架實現(xiàn)數(shù)據(jù)庫查詢(不返回QuerySet的方法)9. Python實現(xiàn)PS濾鏡中的USM銳化效果10. jsp網(wǎng)頁實現(xiàn)貪吃蛇小游戲
