日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

J2EE-RBAC权限管理

發(fā)布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J2EE-RBAC权限管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:http://blog.chinaunix.net/u1/52224/showart_415123.html

?

前不久在http://blog.chinaunix.net/u1/52224/showart_410119.html 講 述了業(yè)務(wù)系統(tǒng)的權(quán)限管理模型,并在http://blog.chinaunix.net/u1/52224/showart_412714.html 實(shí) 現(xiàn)了模型中的SSO 單點(diǎn)登陸,這次講述的是權(quán)限管理、權(quán)限驗(yàn)證的實(shí)現(xiàn),并附帶 一個用戶管理的Demo ,用戶管理的Demo 很粗糙,基本上只是一個演示。 RBAC 是基于角色的權(quán)限管理,RBAC 參考(http://csrc.nist.gov/rbac/ ),有用戶、角色、資源和權(quán)限四種主體,他們簡化的關(guān)系如下: 資源和操作成對組成一種權(quán)限規(guī)則,角色關(guān)聯(lián)到多個規(guī)則表示該角色擁有這些權(quán)限規(guī)則指定的權(quán)限,用戶關(guān)聯(lián)到多個角色表示用戶擁有這些角色的權(quán)限。 上面的模型是Core RBAC ,也就是RBAC 的最基礎(chǔ)的模型,更高級的模型提供了更多的管理功能,像角色繼承和約束等,這里沒 有實(shí)現(xiàn)角色的繼承和約束,著名的開源權(quán)限管理系統(tǒng)ACEGIhttp://www.acegisecurity.org/ )已經(jīng)做了實(shí)現(xiàn),下面講一下基于Core RABC 三 個擴(kuò)充。

用戶關(guān)聯(lián)權(quán)限規(guī)則

Core RBAC 里面,用戶通常不直接與權(quán)限規(guī)則關(guān)聯(lián),所有授 權(quán)過程都是角色關(guān)聯(lián)權(quán)限規(guī)則,然后用戶關(guān)聯(lián)到角色來實(shí)現(xiàn),比如刪除數(shù)據(jù)庫這樣一個過程,刪除是操作,數(shù)據(jù)庫是資源,( 刪除, 數(shù)據(jù)庫) 組成權(quán)限規(guī)則,如果要對用戶bsmith 授 權(quán)允許刪除數(shù)據(jù)庫,那么可以將用戶bsmith 關(guān)聯(lián)到已經(jīng)擁有該權(quán)限的角色, 如果沒有合適的角色,那么必須新建一個角色比如叫admin ,然后將( 刪除, 數(shù) 據(jù)庫) 這個權(quán)限規(guī)則關(guān)聯(lián)到admin ,然后將bsmith 關(guān)聯(lián)到admin ,而不能直接將( 刪 除, 數(shù)據(jù)庫) 關(guān) 聯(lián)到bsmith 。 將用戶關(guān)聯(lián)擴(kuò)充到直接關(guān)聯(lián)權(quán)限規(guī)則后,可以方便個別用戶的特殊授權(quán)。也可以避免大量的特殊授權(quán)帶來的角色零散性,也就是當(dāng)上面的情況較多時,如 果不能對用戶直接關(guān)聯(lián)權(quán)限規(guī)則,那么每次建立的角色數(shù)可能超過系統(tǒng)角色數(shù),容易混淆。

權(quán)限規(guī)則集合

( 操作, 資源) 組成的權(quán)限規(guī)則理論上包含所有的系統(tǒng)權(quán)限規(guī)則,比如對 數(shù)據(jù)庫表T ,有一個查詢操作SELECT ,那么權(quán)限規(guī)則就是(SELECT, T) , 如果還有一個數(shù)據(jù)庫表T1 ,有一個查詢操作SELECT ,那么權(quán)限規(guī)則就是(SELECT, T1) ,資源和操作都是有限的,所以權(quán)限規(guī)則集合也是有限并且可以列舉的,也就是可以一個一個的把這些權(quán) 限規(guī)則記錄下來,分配權(quán)限時只要找到這些權(quán)限規(guī)則,然后關(guān)聯(lián)到相應(yīng)的角色和用戶就可以了。 不過實(shí)際情況往往比預(yù)想的復(fù)雜,第一種情況是雖然權(quán)限規(guī)則有限并且可以列舉,但是數(shù)據(jù)可能很大,需要很大的存儲空間,并且過多的記錄會影響權(quán)限 驗(yàn)證的查詢速度。 第二個問題是對于像論壇文章這樣的內(nèi)容動態(tài)變化的系統(tǒng),如果要對某個用戶授予所有的權(quán)限,那么當(dāng)論壇文章時,需要管理員手動關(guān)聯(lián)這些增加的權(quán)限 規(guī)則到該用戶。當(dāng)然,也可以采用在論壇文章業(yè)務(wù)邏輯處自動關(guān)聯(lián)權(quán)限規(guī)則給用戶,但是這樣一方面沒有達(dá)到權(quán)限系統(tǒng)和業(yè)務(wù)邏輯分開的目的,無法實(shí)現(xiàn)權(quán)限系統(tǒng)的 重用,另一方面也需要設(shè)置一個標(biāo)志來給哪些用戶授權(quán),難以統(tǒng)一化。 要解決這兩個問題,一方面要使權(quán)限規(guī)則集合盡量小,另一方面要使這個集合能自動適應(yīng)資源的動態(tài)變化。通配符是一個很好的解決方式,通過對資源和 操作增加通配符,讓資源和操作本身變成資源集合和操作集合,如對于數(shù)據(jù)庫表T_USER, T_GROUP ,可以用T_* 來表示,* 表示匹配所有字符串,那么(SELECT, T_*) 就表示對所有以T_ 開頭的數(shù)據(jù)庫表的SELECT 操作,這樣以前的權(quán)限規(guī)則就變成了權(quán)限規(guī)則集合,如果(SELECT, T_*) 被授權(quán)給用戶,以后數(shù)據(jù)庫表增加時,只要數(shù)據(jù)庫表名稱以T_ 開頭,該用戶都有權(quán)進(jìn)行SELECT 操 作。這樣權(quán)限管理就變成授權(quán)用戶允許對某些資源進(jìn)行某些操作,權(quán)限規(guī)則不再表示單個操作和單個資源的關(guān)聯(lián),而是一組操作和一組資源進(jìn)行笛卡爾積的集合,即( 操作, 資 源) = 操作集×資源集。 關(guān)系數(shù)據(jù)庫使用% 表示匹配所有字符串,_ 表示匹配單個字符,使用like 關(guān) 鍵字進(jìn)行匹配判斷,所以可以方面的實(shí)現(xiàn)權(quán)限驗(yàn)證,如權(quán)限數(shù)據(jù)表為T_PRIVILEGE , 驗(yàn)證用戶U 是否具有對T_USER 進(jìn)行SELECT 的權(quán)限的SQL 為: select * from T_PRIVILEGE where USER_ID=’U’ and RESOURCE_NAME like ‘T_USER’ and OPERATION_NAME like ‘SELECT’; 如果有記錄返回,表示有權(quán)訪問,根據(jù)不同數(shù)據(jù)庫提供商可以加上限制返回1 條 記錄的判斷提高權(quán)限驗(yàn)證效率。 匹配規(guī)則也可以使用正則表達(dá)式,但是正則表達(dá)式通常驗(yàn)證比較慢,不適合做實(shí)時權(quán)限驗(yàn)證,但是正則表達(dá)式可以實(shí)現(xiàn)更加復(fù)雜的匹配規(guī)則,所以如果對 實(shí)時性要求不高,可以預(yù)先緩存規(guī)則,提高驗(yàn)證效率。

禁止的權(quán)限規(guī)則集

如果權(quán)限規(guī)則不是一個集合,因?yàn)橹挥信c用戶或角色關(guān)聯(lián)的權(quán)限規(guī)則才允許訪問,所以用戶的權(quán)限是一個閉合區(qū)域,不想用戶擁有某些權(quán)限時,只要不進(jìn) 行關(guān)聯(lián)授權(quán)即可。如果權(quán)限規(guī)則使用通配符變成一個集合,那么用戶的權(quán)限將變成一個開放區(qū)域,比如上面的論壇文章列表,假設(shè)論壇文章按照“版面/ 作者/ 文章 標(biāo)題”作為資源命名,那么將( 閱覽, 版面/ 作者/*) 授權(quán)給某用戶時,該用戶允許閱覽該版面下該作者的所有文章,假設(shè)現(xiàn)在有一種管理需求 要求某用戶可以閱覽某版面下某作者除某幾種文章標(biāo)題外的所有文章,這樣單純的允許授權(quán)難以實(shí)現(xiàn)這個管理需求。 法律有許可和禁止的區(qū)別,那么權(quán)限管理也應(yīng)該有許可和禁止兩種授權(quán),上面的不允許訪問某幾種文章標(biāo)題的文章就是一種禁止規(guī)則,如果將這種禁止規(guī) 則合并到允許規(guī)則中,就可以解決上面的問題。這就相當(dāng)于畫了一個大圈表示可以訪問的區(qū)域,但是大圈里面的某些小圈是不可以訪問的區(qū)域。這又帶來一個問題, 假設(shè)允許的和禁止的規(guī)則重疊,以誰為準(zhǔn)?這個沒有一個準(zhǔn)則,不過基于安全性考慮,應(yīng)該采用禁止優(yōu)先,只要是禁止的集合,就算有允許的集合重疊,也不允許訪 問。

提高權(quán)限驗(yàn)證效率

使用關(guān)系數(shù)據(jù)庫存儲權(quán)限數(shù)據(jù)時,權(quán)限數(shù)據(jù)表更新和查詢的操作頻繁度通常小于1:9 , 也就是這是一個典型的OLAP 系統(tǒng),以查詢?yōu)橹?#xff0c;所以可以采用OLAP 的優(yōu)化策略進(jìn)行優(yōu)化,但是大多數(shù)優(yōu)化策略都不具備實(shí)時性,如果兼顧實(shí)時性和效率要 求,可以單獨(dú)創(chuàng)建一個內(nèi)存數(shù)據(jù)庫,這個內(nèi)存數(shù)據(jù)庫只存放用戶、資源、操作關(guān)聯(lián)關(guān)系,也就是( 用 戶, 操作, 資 源) 集合,如果用戶通過角色關(guān)聯(lián)到權(quán)限規(guī)則,那么將這些用戶到權(quán)限規(guī)則的間接 傳遞關(guān)系轉(zhuǎn)變成直接傳遞關(guān)系保存。這個內(nèi)存數(shù)據(jù)庫就相當(dāng)于權(quán)限數(shù)據(jù)的緩存,可以保證很高的查詢效率,并且該內(nèi)存數(shù)據(jù)庫與權(quán)限管理保持同步,可以保證實(shí)時 性。

安裝和配置

附件是權(quán)限管理和權(quán)限驗(yàn)證的實(shí)現(xiàn),也有用戶管理的演示,不過用戶管理很粗糙,實(shí)際使用需要做進(jìn)一步開發(fā),之所以沒有開發(fā)相對完善的用戶管理,是 因?yàn)楝F(xiàn)在已有的系統(tǒng)通常都有完善的用戶管理。 下面簡單講解安裝配置,只在Tomcat5523+MySQL5037+jre1.5.0_12 下 測試過。 1.? 下載rbac+profile.rar ,解壓,得到一系列文件,文件用途如下: profile.admin.src.v1.jar 用戶管理源代 碼 rbac.admin.src.v2.jar 權(quán)限管理源代碼 rbac.auth.src.v2.jar 權(quán)限驗(yàn)證源代碼 profile.v1.MySQL5.sql 用戶管理用戶數(shù)據(jù)表 profile.war 用戶管理WEB 系統(tǒng) rbac.v2.MySQL5.sql 權(quán)限管理數(shù)據(jù)表 rbac.war 權(quán)限管理WEB 系統(tǒng) 2.? 創(chuàng)建數(shù)據(jù)庫profile ,使用UTF-8 導(dǎo) 入profile.v1.MySQL5.sqlprofile ,使用下面SQL 創(chuàng) 建用戶root/1Insert into T_PROFILE(USER_ID, USER_NAME, USER_PASSWORD) values(‘1’, ‘root’, sha1(‘1’)); 如果創(chuàng)建過先前SSO 單點(diǎn)登陸的用戶數(shù)據(jù)表,可以跳過這步,使用先 前的數(shù)據(jù)表。 3.? 創(chuàng)建數(shù)據(jù)庫rbac ,使用UTF-8 導(dǎo) 入rbac.v2.MySQL5.sqlrbac4.? 拷貝profile.warrbac.warTomcat5523/webapps/ ,會自動生成profilerbac 目 錄。 5.? 參考http://blog.chinaunix.net/u1/52224/showart_412714.html 配 置單點(diǎn)登陸,因?yàn)闄?quán)限管理和用戶管理需要依賴單點(diǎn)登陸。 6.? 下載相關(guān)依 賴Java 庫: 下載cglib 最新版本http://cglib.sourceforge.net/ ,拷貝asm.jarcglib-2.1.3.jarTomcat/shared/lib 。 下載c3p0 最新版本http://sourceforge.net/projects/c3p0 ,拷 貝c3p0-0.9.1.1.jarTomcat/shared/lib 。 下載mysql-connector 最新版本http://sourceforge.net/projects/mmmysql/ , 拷貝mysql-connector-java-5.0.4-bin.jarTomcat/shared/lib 。 下載dwr 最新版本http://getahead.org/dwr ,拷貝dwr2.0.1.jarTomcat/shared/lib7.? 打開profile/ WEB-INF/classes/rbac_auth.propertiessso_agent.propertiesprofile_admin.properties# 修改為合適配置 # rbac_auth.properties rbac.auth.db.ds.c3p0.url=jdbc:mysql://localhost/rbac rbac.auth.db.ds.c3p0.user=root rbac.auth.db.ds.c3p0.password =1 # sso_agent.properties sso.passport.login=http://bsmith-cn:8080/sso/passport/login.srv sso.passport.logout=http://bsmith-cn:8080/sso/passport/logout.srv # profile_admin.properties profile.admin.db.ds.c3p0.url=jdbc:mysql://localhost/profile profile.admin.db.ds.c3p0.user=root profile.admin.db.ds.c3p0.password=1 8.? 打開rbac/WEB-INF/classes/ 下的rbac_admin.propertiesrbac_auth.propertiessso_agent.properties# 修改為合適配置 # rbac_auth.properties rbac.auth.db.ds.c3p0.url=jdbc:mysql://localhost/rbac rbac.auth.db.ds.c3p0.user=root rbac.auth.db.ds.c3p0.password=1 # sso_agent.properties sso.passport.login=http://bsmith-cn:8080/sso/passport/login.srv sso.passport.logout=http://bsmith-cn:8080/sso/passport/logout.srv # rbac_admin.properties rbac.admin.profile.explorer=http://bsmith-cn:8080/profile/admin/explorer.jsp? rbac.admin.profile.profile=http://bsmith-cn:8080/profile/admin/profile.jsp? rbac.admin.db.rbac.ds.c3p0.url=jdbc:mysql://localhost/rbac rbac.admin.db.rbac.ds.c3p0.user=root rbac.admin.db.rbac.ds.c3p0.password=1 9.? 重啟Tomcat 使設(shè)置生效。

使用簡介

瀏覽http://yourhost:yourport/rbac/admin/userList.jsp 進(jìn) 入用戶列表,可以管理用戶。 瀏覽http://yourhost:yourport/rbac/admin/roleList.jsp 進(jìn) 入角色列表,可以管理角色。 瀏覽http://yourhost:yourport/rbac/admin/operationList.jsp 進(jìn) 入操作列表,可以管理操作。 瀏覽http://yourhost:yourport/rbac/admin/resourceList.jsp 進(jìn) 入資源列表,可以管理資源。 默認(rèn)用戶ID1 的用戶可以進(jìn)行所有操作(%, %)

驗(yàn)證權(quán)限

rbac.auth.src.v2.jar 中包含了權(quán)限驗(yàn)證的源代 碼,rbac_auth.properties 是配置文件,可以配置權(quán)限管理 數(shù)據(jù)庫的路徑。 org.bsmith.rbac.auth. Authorization 實(shí) 現(xiàn)權(quán)限驗(yàn)證,詳細(xì)參考org.bsmith.rbac.auth. Authorization.java
文件:rbac+profile.rar
大小:876KB
下載:下 載
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的J2EE-RBAC权限管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。