基於struts專案許可權解決方案的探索 (轉)

amyz發表於2007-08-16
基於struts專案許可權解決方案的探索 (轉)[@more@]

基於專案解決方案的探索:namespace prefix = o ns = "urn:schemas--com::office" />

 

  前一段時間我曾專門閱讀過一些關於JAAS的資料,網上這方面的資料不多,篇篇文章都是側重於講述一些核心的JAAS類(不過講的蠻不錯的,呵呵。。。對於這方面的極好),而對於應用方面給我的感覺就像:

“天啊,幾乎沒有人用到它~!”

還好chinaxp論壇的中涉及了這方面的應用,而且它們就是那樣做的,這其中給了我不少啟示。

目前在我參與的一個專案(正在開發)中,我採用JAAS的驗證機制(其中的授權部分因為沒有非常熟悉的掌握所以暫時沒有采用,而暫時採用另外一種方法來解決,這種方法再接下來的部分涉及。)

 

先說一些我以其為背景的這個專案:

它算是一個比較大的專案(省級高速公路路政工作平臺),大的劃分可以分為10個大模組26個子模組,具體分為基本資訊維護、路政案件、路政審批等等大模組;許可權主要是(對某一模組的維護、瀏覽以及列印等)

經過討論我們在設計許可權的時候是這樣考慮的:

分為三個“角色”:、使用者組、許可權;

他們的關係為:使用者屬於某個使用者組;許可權下放到使用者組。(這一切都是和“當場客戶代表”共同討論決定的。)

 

如下表是許可權的內容:

rightID

rightName

00100

維護基本資訊

00101

瀏覽基本資訊

00500

維護路產資訊

00501

瀏覽路產資訊

……

……

 

其中模組用xml,如:

 

module_config.xml

 

 

  維護基本資訊

  00100

 

 

   維護路產資訊

  00500

 

……

(採用單例在容器啟動的時候進行解析)

 

把具體的許可權繫結到每一個*.do請求:

 

request_.xml

 

 

  useradmin.do

   顯示使用者資訊維護主頁面

  00100

 

  ……

(也是在容器啟動的時候解析並放到容器中)

 

系統中許可權流程控制基本上我把它分為兩個步驟:

 

1.  利用filter以及JAAS來進行使用者的過濾

其中所有的*.也要透過*.do來引導,這樣就能確保整個系統中沒有許可權“盲點”,也即可以保證每一個*.do都是“乾淨的”。

這其中涉及到以下幾個,具體的程式碼在此不給出:

(1)iRoadLogin.config

IRoadLogin{

   com.ifreeway.iroad.security.DataBaseLoginModule required de=true;

};

這個檔案在建立LoginContext的時候根據這個檔案來確定該載入哪個LoginModule物件。

(2)ParseRequestFilter.
對每一個請求進行非法使用者的過濾。

(3)DataBaseLoginModule.java

(4)SimpleCallbackHandler.java

  上邊的幾個類的介紹涉及過多的JAAS核心類的內容,建議閱讀下面連線的內容:

 0114/1648365.shtml">這篇文章對於你瞭解JAAS絕對有幫助,你也可以透過我的站點來閱讀更多的JAAS資料:

 

2.  2. 在確保是合法使用者(已經透過1。的過濾的使用者)請求*.do的時候再來判斷該使用者是否擁有請求該do的權利。
可以在每個action的父類BaseAction中建立一個方法來判斷是否合法,如:

  public Boolean validateRight(String _request_do) throws ErrorRequestException{

  //取得user所在的組:a

  //根據_request_do,假設其為:useradmin.do

   //獲得其所在的組:b

  //然後根據兩次組(a 和 b)是否是同一組來判斷該請求是否合法

 

  //此時的a和b都是很容易在容器中獲得的,不會損失效能。

}

前提:專案中的又一個公共的BaseAction,其他的action都要繼承它。這一點我想使用struts開發專案的開發員都是很容易理解的。

如:有一個UserAdminAction.java

那麼在這個它的時候首先validateRight(“useradmin.do”)來進行許可權判斷,如果返回false,那麼跳轉到error頁。

 

其實我上邊所寫出的解決方法在我現在的專案中是夠用的。是誰說過:“夠用為原則”?專案的許可權設計這部分實在是個非常大的討論題目,這裡算是拋磚引玉,希望給你一點提示,也希望你可以給我一些更好方法的提示,to:你可以透過plateau_t@sina.com">你可以透過plateau_t@sina.com和我聯絡,也可以訪問我的站點()給我留言。

 

Jplateau 2003年10月20日星期一 精博


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962726/,如需轉載,請註明出處,否則將追究法律責任。

相關文章