Posted on 2009-12-29 04:46
leekiang 閱讀(715)
評論(0) 編輯 收藏 所屬分類:
struts
轉(zhuǎn)自http://davidwang.javaeye.com/blog/83952(此文思路相當(dāng)清晰,值得一看)
http://jakarta.apache.org/turbine/
Turbine是一個提供了完善權(quán)限控制的堅實框架(Fulcrum子項目是其基石)。Turbine的個人用戶不多,但不少公司用戶選擇
Turbine作為框架,開發(fā)一些嚴肅的應(yīng)用(我并沒有說,用其它框架開發(fā)的應(yīng)用就不嚴肅^_^)。Portal開源項目JetSpeed建立在
Turbine上。
Turbine用RunData來傳遞輸入輸出數(shù)據(jù)。如同Maverick的ControllerContext,RunData是整個
Turbine框架的數(shù)據(jù)交換中心。除了request,
response等基本信息,RunData直接包括了User/ACL等權(quán)限控制相關(guān)的屬性和方法,另外還包括Action Name和Target
Template Name等定位屬性。
Module是Turbine里面除了RunData之外的又一個核心類,是Turbine框架的基本構(gòu)件,Action是
Module,Screen也是Module。Turbine提供了LoginUser和LogoutUser兩個Action作為整個系統(tǒng)的出入口。而
其余流量的權(quán)限控制則由類似于Servlet Filter機制的Pipeline控制。
Turbine Pipeline的編程模型和Servlet Filter一模一樣:Turbine
Pipeline的Valve就相當(dāng)于Servlet Filter,而ValveContext則相當(dāng)于Filter
Chain。還有更相近的例子,Tomcat源代碼里面也有Valve和ValueContext兩個類,不僅編程模型一樣,而且名字也一樣。
權(quán)限控制貫穿于Turbine框架的始終。要用好Turbine,首先要通曉子項目Fulcrum 的Security部分的權(quán)限實現(xiàn)模型。
Fulcrum Security的權(quán)限實體包括四個-- User, Group, Role, Permission。
實體之間包含{Role,Permission}和{ Group, User, Role}兩組關(guān)系。
{Role,Permission}是多對多的關(guān)系,一個Role可以具有各種Permission;{ Group, User, Role}之間是多對多的關(guān)系,一個Group可包含多個User,并可以給User分配不同的Role。
權(quán)限模型的實現(xiàn)同樣采用Peer模式,Entity -> EntityPeer, Entity -> ManagerPeer。
Entity和EntityManger代表抽象的模型概念,而EntityPeer和ManagerPeer代表具體的實現(xiàn)。
用戶可以根據(jù)模型,提供不同的實現(xiàn),比如,用內(nèi)存結(jié)構(gòu)中實現(xiàn),用數(shù)據(jù)表結(jié)構(gòu)實現(xiàn),與Windows
NT權(quán)限驗證機制結(jié)合,與OSWorkflow的權(quán)限控制模型結(jié)合,等等。其中,用數(shù)據(jù)表結(jié)構(gòu)實現(xiàn),又可以選擇用Torque實現(xiàn),或者用
Hibernate實現(xiàn)。(Torque是Turbine的O/R Mapping子項目)
例如,F(xiàn)alcrum.property配置文件包含如下Security相關(guān)選項:
# -------------------------------------------------------------------
# S E C U R I T Y S E R V I C E
# -------------------------------------------------------------------
services.SecurityService.user.class=org.apache.fulcrum.security.impl.db.entity.TurbineUser
services.SecurityService.user.manager=org.apache.fulcrum.security.impl.db.DBUserManager
services.SecurityService.secure.passwords.algorithm=SHA
# -------------------------------------------------------------------
# D A T A B A S E S E R V I C E
# -------------------------------------------------------------------
services.DatabaseService.database.newapp.driver=org.gjt.mm.mysql.Driver
services.DatabaseService.database.newapp.url=jdbc:mysql://127.0.0.1/newapp
services.DatabaseService.database.newapp.username=turbine
services.DatabaseService.database.newapp.password=turbine
這說明,權(quán)限控制實現(xiàn)由數(shù)據(jù)庫提供,需要根據(jù)權(quán)限模型創(chuàng)建如下數(shù)據(jù)表:
TURBINE_USER,TURBINE_ROLE,TURBINE_GROUP,
TURBINE_PERMISSION,TURBINE_ROLE_PERMISSION,
TURBINE_USER_GROUP_ROLE
Turbine表單處理中的中文:http://dev.csdn.net/article/70476.shtm
使用turbine的項目:
1)http://www.campware.org的Cream CRM
2)http://scarab.tigris.org/
3)Ohioedge 是采用B/S架構(gòu)的開源的客戶管理系統(tǒng)。基于Jetspeed/Turbine技術(shù)
? http://www.ohioedge.com/
參考資料:
http://turbine.apache.org/fulcrum/fulcrum-osworkflow-example
http://www.itpub.net/thread-306279-1-1.html
http://dev.csdn.net/article/19/19994.shtm