動(dòng)態(tài)Proxy與Java ACL用戶訪問(wèn)控制機(jī)制實(shí)現(xiàn)
粗粒度控制:可以規(guī)定訪問(wèn)整個(gè)對(duì)象或?qū)ο笕旱哪硞€(gè)層,而細(xì)粒度控制則總是在方法或?qū)傩詫舆M(jìn)行控制,比如:
允許一個(gè)文件為只讀是屬于粗粒度控制,而允許對(duì)這個(gè)文件某行有寫操作則屬于細(xì)粒度控制。
一個(gè)好的用戶控制機(jī)制當(dāng)然既允許粗粒度也允許細(xì)粒度控制,在Jive中我們看到是使用Proxy來(lái)達(dá)到這個(gè)目的,但是我們也發(fā)現(xiàn),由于需要對(duì)每個(gè)類都要進(jìn)行細(xì)粒度控制,所以必然對(duì)每個(gè)類都要做一個(gè)Proxy類,這樣帶來(lái)了很多Proxy類,如ForumProxy ForumThreadProxy ForumFactoryProxy等,無(wú)形增加了系統(tǒng)復(fù)雜性。
使用動(dòng)態(tài)Proxy可以很好的解決這個(gè)問(wèn)題。再結(jié)合java.security.acl的ACL機(jī)制,我們就可以靈活地實(shí)現(xiàn)粗粒度和細(xì)粒度的雙重控制。
當(dāng)一個(gè)用戶login后,我們就要在內(nèi)存中為其建立相應(yīng)的授權(quán)訪問(wèn)機(jī)制,使用java.security.acl可以很方便的建立這樣一個(gè)安全系統(tǒng)。
首先任何一個(gè)對(duì)象都應(yīng)該有個(gè)基本屬性:擁有者 或擁有者所屬組(Windows中每個(gè)目錄安全描述符都由4部分構(gòu)成:對(duì)象的創(chuàng)建者、對(duì)象所屬的組、自由存取控制和系統(tǒng)存取控制)。
1. Java acl開始第一步是建立一個(gè)主體 Principal,其中SecurityOwner是主體的擁有者: private static final Principal _securityOwner = new PrincipalImpl('SecurityOwner');
2. 當(dāng)用戶login進(jìn)來(lái)時(shí),他帶有兩個(gè)基本數(shù)據(jù):訪問(wèn)密碼和他要訪問(wèn)的對(duì)象ApplicationName。首先驗(yàn)證用戶名和密碼,然后從數(shù)據(jù)庫(kù)中取出其權(quán)限數(shù)據(jù),建立Permission,這里使用Feature繼承了Permission,在Feature中定義了有關(guān)權(quán)限的細(xì)節(jié)數(shù)據(jù)(如讀 寫 刪)。
相關(guān)文章:
1. Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)2. php模擬實(shí)現(xiàn)斗地主發(fā)牌3. .Net Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟4. 在IDEA中實(shí)現(xiàn)同時(shí)運(yùn)行2個(gè)相同的java程序5. jQuery 實(shí)現(xiàn)DOM元素拖拽交換位置的實(shí)例代碼6. vue 使用localstorage實(shí)現(xiàn)面包屑的操作7. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)8. python 代碼實(shí)現(xiàn)k-means聚類分析的思路(不使用現(xiàn)成聚類庫(kù))9. 使用Canal實(shí)現(xiàn)PHP應(yīng)用程序與MySQL數(shù)據(jù)庫(kù)的實(shí)時(shí)數(shù)據(jù)同步10. Docker 容器健康檢查機(jī)制

網(wǎng)公網(wǎng)安備