![MarmotFramework1.x配置手冊(cè)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/56fad839-4fdc-4e26-aa1f-219a28bd8807/56fad839-4fdc-4e26-aa1f-219a28bd88071.gif)
![MarmotFramework1.x配置手冊(cè)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/56fad839-4fdc-4e26-aa1f-219a28bd8807/56fad839-4fdc-4e26-aa1f-219a28bd88072.gif)
![MarmotFramework1.x配置手冊(cè)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/56fad839-4fdc-4e26-aa1f-219a28bd8807/56fad839-4fdc-4e26-aa1f-219a28bd88073.gif)
![MarmotFramework1.x配置手冊(cè)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/56fad839-4fdc-4e26-aa1f-219a28bd8807/56fad839-4fdc-4e26-aa1f-219a28bd88074.gif)
![MarmotFramework1.x配置手冊(cè)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/56fad839-4fdc-4e26-aa1f-219a28bd8807/56fad839-4fdc-4e26-aa1f-219a28bd88075.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Marmot Framework 1.x配置手冊(cè)Marmot Framework 1.x配己置手冊(cè) . 11基本配置 .31.1升級(jí) doradostudio . 31.2生成Marmot Framework 需要的數(shù)據(jù)庫(kù)表 .31.3配置web項(xiàng)目.41.4實(shí)現(xiàn) CurrentAccountAccessor 接口 . 82權(quán)限 .92.1使用Marmot Framework中提供的權(quán)限功能 .92.1.1工具類說(shuō)明 .102.1.2使用說(shuō)明 .142.2集成其他的權(quán)限實(shí)現(xiàn)方式 .252.3利用Marmot Framework對(duì)應(yīng)用進(jìn)行權(quán)限控制 .253系統(tǒng)主框架配置 .273.1建立屬于自己
2、主框架 .273.2配置登錄功能 . 293.3設(shè)置系統(tǒng)默認(rèn)頁(yè) .313.4動(dòng)態(tài)改變框架風(fēng)格 .314人機(jī)驗(yàn)證碼 .324.1配置默認(rèn)的人機(jī)驗(yàn)證碼功能 .324.2與登錄機(jī)制的結(jié)合方式 .334.3擴(kuò)展自己的人機(jī)驗(yàn)證處理器 . 335動(dòng)態(tài)菜單 .345.1使用Marmot Framework中提供的菜單存貯機(jī)制 .345.2生成各種菜單 .355.3集成其它的菜單存貯機(jī)制 .376收藏夾 .396.1使用 FavoritePanel . 396.2使用 LazyMenuHelper . 396.3使用收藏夾的維護(hù)界面 . 417高級(jí)查詢 .417.1高級(jí)查詢的定義方法 .427.2關(guān)于查詢方案
3、 .447.3查詢字段模版的維護(hù) .447.4AutoSqlDataset +高級(jí)查詢.457.5SqlDataset + 高級(jí)查詢 .457.6以Hibernate 為持久層的 Dataset +高級(jí)查詢 .487.7以iBatis ( SQLMap )為持久層的Dataset + 高級(jí)查詢 .507.8高級(jí)查詢相關(guān)模型對(duì)象的簡(jiǎn)介 .548控件動(dòng)態(tài)配置功能 .558.1關(guān)于 marmotProfileKey .558.2DataTable 動(dòng)態(tài)配置.558.3AutoForm 動(dòng)態(tài)配置 . 578.4常見(jiàn)的擴(kuò)展點(diǎn) .588.5管理DataT able和AutoForm的配置信息 .609數(shù)據(jù)
4、字典 .619.1維護(hù)Marmot Framework默認(rèn)的數(shù)據(jù)字典 .619.2在Dataset中引用數(shù)據(jù)字典 .619.3數(shù)據(jù)字典模型對(duì)象簡(jiǎn)介 .629.4集成其他的數(shù)據(jù)字典機(jī)制.6310實(shí)時(shí)消息.6510.1實(shí)現(xiàn) MessageProcessor 接口 .6510.2實(shí)時(shí)消息的參數(shù)設(shè)置 .6710.3使用實(shí)時(shí)消息功能 .6811皮膚切換.7012系統(tǒng)屬性功能 . 7112.1維護(hù)系統(tǒng)屬性 .7112.2使用系統(tǒng)屬性功能 .7213附錄:Marmot Framework的默認(rèn)數(shù)據(jù)庫(kù)表說(shuō)明 .7314附錄:”下拉類型”、”下拉描述信息等的配置方法 .7514.1dropDownType禾口
5、dropDownMeta .7514.2dropDow nScript . 761基本配置1.1升級(jí) dorado studio將Marmot Framework 解壓目錄中的ide/studio中的所有文件覆蓋到原dorad5.x安裝目錄下的studio 中,已完成對(duì) dorado studio 的升級(jí)。1.2生成Marmot Framework需要的數(shù)據(jù)庫(kù)表生成Marmot Framework需要的數(shù)據(jù)庫(kù)表包含兩部分工作:建立數(shù)據(jù)庫(kù)表和導(dǎo)出初始數(shù)據(jù)。建立數(shù)據(jù)庫(kù)表在Marmot Framework 解壓目錄的template/framework/db目錄中找到跟目標(biāo)數(shù)據(jù)庫(kù)匹配的建庫(kù)腳本。目前
6、以提供的建庫(kù)腳本包括:? oracle.sql - 用于Oracle數(shù)據(jù)庫(kù)的建庫(kù)腳本。? mssql.sql - 用于 Microsoft SQL Server數(shù)據(jù)庫(kù)的建庫(kù)腳本。? mysql.sql - 用于MySQL數(shù)據(jù)庫(kù)的建庫(kù)腳本。? db2.sql - 用于DB2數(shù)據(jù)庫(kù)的建庫(kù)腳本。? sybase.sql - 用于Sybase SQL Server 數(shù)據(jù)庫(kù)的建庫(kù)腳本。? an si.sql -通用的建庫(kù)腳本。如果您沒(méi)有在上面找到合適的建庫(kù)腳本,那么使 用這個(gè)試一試。如果仍不行,可以使用db/model/marmot-framework.pdm文件來(lái)嘗試生成跟您的數(shù)據(jù)庫(kù)匹配的建庫(kù)腳本。
7、pdm文件應(yīng)使用Sybase PowerDesig ner ?軟件打開。如果你沒(méi)有使用Marmot Framework中的所有功能,那么您事實(shí)上并不需要腳本中的所有數(shù)據(jù)庫(kù)表,您可以根據(jù)需要選擇只創(chuàng)建其中必須用到的那些表。有關(guān)每個(gè)的表的具體作用, 請(qǐng)參考附錄:Marmot Framework的默認(rèn)數(shù)據(jù)庫(kù)表說(shuō)明。導(dǎo)出初始數(shù)據(jù)在 Marmot Framework 解壓目錄的 template/framework/db 目錄中找到 data.sql , 在數(shù)據(jù)庫(kù)中執(zhí)行其中的腳本。1.3配置web項(xiàng)目建立全新的web應(yīng)用Marmot Framework已經(jīng)提供了一個(gè)空白的模版項(xiàng)目,位于 Marmot F
8、ramework 解壓目錄的template/framework中。在使用只要將其復(fù)制到最終的工作目錄,并將其中的marmot-template.dorado文件重命名為新項(xiàng)目的名稱,然后就可以使用 doradostudio進(jìn)行開發(fā)了。例如:如果我們希望建立一個(gè)新的項(xiàng)目,名為my-project ,則只要將marmot-template.dorado重命名為 my-project.dorado 即可。需要特別注意的是,使用通過(guò)上述方法生成項(xiàng)目在運(yùn)行時(shí)dorado studio 仍會(huì)使用marmot-template 作為應(yīng)用名。要修改此名稱可在 dorado studio 中點(diǎn)擊Project
9、 Properties按鈕(如圖),并在彈出的對(duì)話框中修改應(yīng)用名。上二 doroLiFile Edit Project Service Tool CW ir 3 Helpi4IR| 屋 i 屆i 二 iSUProjectnn a mot- fr ame wcjrK i- * Source+巴 sain piei 口 s4j. properties二META-INF +I-CD WEBINF + marmot如果您是使用BSTEK提供的dorado eclipse 插件進(jìn)行dorado開發(fā),那么可以跳過(guò)上面重命名文件的步驟,直接刪除marmot-template.dorado 即可。集成到既有的
10、web應(yīng)用在進(jìn)行此步驟之前應(yīng)首先確保該應(yīng)用中已經(jīng)成功的配置好了dorado5.x。在web應(yīng)用中配置dorado 的方法見(jiàn)dorado5.x 的相關(guān)文檔。? 復(fù)制jar包將 Marmot Framework 解壓目錄中的 template/framework/web 將 /WEB-INF/lib 中的jar文件復(fù)制到新的項(xiàng)目中。對(duì)于項(xiàng)目已經(jīng)存在的 dorado-*.jar ,覆蓋前建議檢查其版本,原則上以保留較新的 dorado 版本jar包為佳,dorado-*.jar的版本可通過(guò)其中的 MANIFEST 文件確定。如果原先的項(xiàng)目中已經(jīng)有了Marmot早期版本的jar包,在復(fù)制前應(yīng)當(dāng)首先刪除
11、原有的 marmot.jar 及 marmot-*.jar 。對(duì)于其它的第三方 jar包(例如spri ng、apache commo ns )的jar,在合并時(shí)同 樣可以以保留最新版本為原則。?復(fù)制必要的文件將模版目錄中的 web/WEB-INF/dy namic-dropdow n2.jsp復(fù)制到原項(xiàng)目的相應(yīng)位置,如果此文件已存在則直接覆蓋。將模版目錄中的 web/marmot 復(fù)制到原項(xiàng)目的相應(yīng)位置。? 配置dorado 的home 目錄將模版目錄中的home文件夾中的所有文件合并進(jìn)原項(xiàng)目的相應(yīng)位置。然后使用dorado studio 打開 mapping 中的 global.map.x
12、ml 文件,將新增加的 marmot.map.xml注冊(cè)至 U其中。如果計(jì)劃使用Marmot Framework中提供的登錄和權(quán)限機(jī)制,先需要在global.map.xml 中添加兩個(gè)exception 的攔截處理器,它們的 xml配置如下: m H vara vn rn m vw vsra vn ra m vm vn m aw mm ana nra aw awa m m n am m HH rn nn n-a nw rn m m H m ?配置 web.xml使用文本編輯器打開模版目錄中的web/WEB-INF/web.xml ,將其中的下列項(xiàng)目合并到原項(xiàng)目的 web.xml中。 conte
13、xtConfigLocation /WEB-INF/configs/*-context.xml log4jConfigLocation /WEB-INF/classes/perties marmot-hibernate-filter org.springframework.orm.hibernate3.support.0penSessionlnViewFilter sessionFactoryBeanName marmot.sessionFactory marmot-hibernate-filter n *.d marmot-hibernate-filter *.jsp or
14、g.springframework.web.context.ContextLoaderListener org.springframework.web.util.Log4jConfigListener com.bstek.dorado.security.UserNotLoggedlnException/authorization.sessionExpired.d 上述幾項(xiàng)配置在合并的過(guò)程可能需要對(duì)局部做些調(diào)整,這完全取決與原項(xiàng)目的配置 和運(yùn)行環(huán)境,我們無(wú)法在此可各種可能出現(xiàn)的情況進(jìn)行一一的分析。因此在完成此 項(xiàng)工作的時(shí)需掌握一定 J2EE知識(shí)及web.xml的配置技巧。其中,最后的項(xiàng)并非在所有
15、情況下需要,只有當(dāng)您確認(rèn)需要使用Marmot Framework 中提供的權(quán)限功能時(shí)才有必要配置此項(xiàng)。?配己置 perties使用文本編輯器打開原項(xiàng)目中的WEB-INF/perties文件,檢查您當(dāng)前使用的FileLoader的類型,如果原先使用的是ResourceFileLoader ,那么您可以直接跳過(guò)此步。例如:configFileLoader=mon.fileloader.ResourceFileLoadersourceFileLoader=mon.fileloader.ResourceFileLoaderconfigFileLoader.roo
16、t=doradohomesourceFileLoader.root=如果原先使用的是PathFileLoader ,那樣,您需要將其中的PathFileLoader 替換為 AutoFileLoader 。例如:configFileLoader=mon.fileloader.AutoFileLoadersourceFileLoader=mon.fileloader.AutoFileLoaderconfigFileLoader.root=D:/workspace/marmot-framework/homesourceFileLoader.root=D:/workspace/marmot-fram
17、ework/sampleaaad.aaaiaAaaBd.aaBd-SiasaABaad.aaaiSAaasA-aBd.SiasaAaaad.aaBaA-aad.KaBd &ssaaiaanw亠wmwmna亠aBaAaaBd.-asa_faasad.aaassa-aiSiaBd.KaBd_faasad.aaad_Biasa-atsaBd.KaBiiaBad.aaaiS&aaa-aiSaBd.SiaBaJiaBad.aaaia&aaa&saBd-a配置Marmot Framework的數(shù)據(jù)源Marmot Framework使用的數(shù)據(jù)源的定義在WEB-INF/co nfigs/marmot-base
18、-co ntext.xml中,其名稱為marmot.dataSource。如果您了解Spri ng的配置方法,那么您完全可以根據(jù)之前掌握的技巧來(lái)完成數(shù)據(jù)連接的配置。如果希望配置JDBC類型的數(shù)據(jù)連接,只要直接打開WEB-INF/co nfigs/perties,根據(jù)數(shù)據(jù)源修改其中的幾個(gè)參數(shù)就可以了。當(dāng)然,Marmot Framework并沒(méi)有限定一定要使用JDBC方式的連接,您完全可以考慮使用應(yīng)用服務(wù)器提供的數(shù)據(jù)連接池,具體的配置方式請(qǐng)參考Spri ng的相關(guān)文檔。1.4實(shí)現(xiàn) CurrentAccountAccessor 接口要使Marmot Framework能
19、夠正確的運(yùn)轉(zhuǎn)起來(lái),必須使 Marmot Framework 能夠得知當(dāng)前系統(tǒng)的登錄信息,Marmot Framework中的高級(jí)查詢、控件動(dòng)態(tài)狀態(tài)、實(shí)時(shí)消息等功能都需要獲得這些信息才能正確的工作。使Marmot Framework感知登錄帳號(hào)信息的方法是實(shí)現(xiàn)CurrentAccountAccessor接口,該接口的聲明如下。package org.marmot.framework.security;/*用于獲取系統(tǒng)當(dāng)前登錄信息的類的接口* author Benny Bao*/ public interface CurrentAccountAccessor /*返回系統(tǒng)當(dāng)前是否已登錄* retu
20、rn 是否已登錄.*/public boolean isLoggedln();/*返回系統(tǒng)當(dāng)前登錄者的帳號(hào)信息* return link org.marmot.framework.security.Account*/public Account getCurrentAccount();很多時(shí)候,在Curre ntAccou ntAccessor的實(shí)現(xiàn)類中需要獲得 HttpServletRequest對(duì)象,以便于訪問(wèn) Session。如果您需要實(shí)現(xiàn)這樣的功能,可以考慮繼承AbstractHttpCurre ntAcco un tAccessor而不是直接實(shí)現(xiàn)Curren tAcco un tAc
21、cessorAbstractHttpCurre ntAccou ntAccessor的聲明如下:package org.marmot.framework.security;import javax.servlet.http.HttpServletRequest;import mon.DoradoContext;import mon.HttpDoradoContext;/* 支持獲取 HttpServletRequest 對(duì)象的linkorg.marmot.framework.security.CurrentAccountAccessor* author Benny Bao抽象實(shí)現(xiàn)類.*/pub
22、lic abstract class AbstractHttpCurrentAccountAccessorCurrentAccountAccessor implements/*返回當(dāng)前線程對(duì)應(yīng)的 HttpServletRequest 對(duì)象.* return HttpServletRequest 對(duì)象.*/protected HttpServletRequest getRequest() DoradoContext context = (HttpDoradoContext) DoradoContext. if (contextinstanceof HttpDoradoContext) retur
23、n(HttpDoradoContext) context).getRequest();getC on text (); elsereturnnull ;完成上述實(shí)現(xiàn)類之后,只要將該類配置到WEB-INF/c on figs/marmot-framework-c on text.xml的marmot.curre ntAcco un tAccessor中就可以了。事實(shí)上,在很多情況下并不是必須使用AbstractHttpCurrentAccountAccessor,因?yàn)橥ㄟ^(guò)DoradoContext同樣可以很簡(jiǎn)單的訪問(wèn) Session中的屬性。DoradoContext的使用方法見(jiàn)dorado的相
24、應(yīng)文檔。2權(quán)限2.1 使用Marmot Framework 中提供的權(quán)限功能Framework提供的權(quán)限是基于角色,資源兩個(gè)基本信息搭建的權(quán)限管理系統(tǒng),禾U用其中資源表中的 RES TYPE取值可為理中的視圖模型元素,業(yè)務(wù)方法以及co ntrol,method,url三種類型。分別對(duì)應(yīng)資源管URL調(diào)用(URL包含菜單資源)。2.1.1主要配置說(shuō)明類的authentication方法判斷系統(tǒng)帳號(hào)對(duì)某一個(gè)ACEGI提供的功能對(duì)Web應(yīng)用系統(tǒng)調(diào)用加以保護(hù)以及通過(guò)對(duì)方法調(diào)用的保護(hù)以便在更底層的級(jí)別上實(shí)現(xiàn)企業(yè)信息系統(tǒng)的地安全性。同時(shí)添加了 dorado視圖模型元素的權(quán)限過(guò)濾機(jī)制,通過(guò)這種過(guò)濾機(jī)制, 我們
25、可以過(guò)濾視圖模型中的所有元素,根據(jù)權(quán)限設(shè)定決定組件的可編輯與可操作特性。如表格數(shù)據(jù)列的可見(jiàn)性,表格列的可編輯特性?;蚋鶕?jù) 權(quán)限設(shè)定決定表單,按鈕等的可見(jiàn)性。另外Framework 提供的權(quán)限管理機(jī)制也可以很 方便的控制系統(tǒng)中的菜單使用權(quán)限。角色與資源的對(duì)應(yīng)關(guān)系如下:SecurityUtils使用時(shí),我們可以通過(guò)SecurityUtils資源的是否具有可訪問(wèn)的權(quán)限package org.marmot.security.util;/*權(quán)限驗(yàn)證工具類* author william*/ public class SecurityUtils /*判斷系統(tǒng)賬號(hào)對(duì)指定資源是否具有訪問(wèn)權(quán)限* param u
26、ser* param resource* return*/public static boolean authentication(String user, String resource) try return getAuthenticationManager().authentication(user, resource); catch (Exception e) logger.error(e.getMessage(), e.filllnStackTrace();return false;.使用 MarmotFramework 時(shí),需要在 org.marmot.framework.secu
27、rity.Authorizer的實(shí)現(xiàn)類中的isAuthorized 方法中調(diào)用SecurityUtils 的authentication方法判斷登錄用戶對(duì)資源的訪問(wèn)權(quán)限。一般情況下該方法會(huì)在 safe為true的Controller或ViewModel被調(diào)用時(shí)自動(dòng)觸發(fā),或通過(guò)EL表達(dá)式進(jìn)行權(quán)限判斷時(shí)會(huì)自動(dòng)調(diào)用這個(gè)函數(shù),這幾種調(diào)用機(jī)制在后面 中繼續(xù)說(shuō)明。另外使用權(quán)限時(shí)需要注意在用戶登錄系統(tǒng)的時(shí)候或者用戶退出系統(tǒng)的時(shí)候,需要調(diào)用SecurityUtils 的login與logout方法,分別用于初始化和注銷權(quán)限系統(tǒng)的當(dāng)前帳號(hào)系 統(tǒng)信息。這兩個(gè)動(dòng)作是必須的。login與logout方法的申明如下:*
28、登錄。如登錄失敗則拋岀異常。* param user* param password* throws Exception*/public static void login(String account, String password) throws Exception try if (StringHelper.isEmpty(account) throw new Exception( 登陸帳號(hào)不能為空! ”);if (StringHelper.isEmpty(password) throw new Exception( 密碼不能為空! ”);getAuthenticationManager
29、().authenticate(account, password);User user = getUserService().loadSecurityUserByUsername(account);DoradoContext context = DoradoContext.getContext(); context.setAttribute(DoradoContext.SESSION , userSessionKey , user); catch (Throwable e) throw new Exception用戶登錄失?。?,e.filllnStackTrace();/*登岀,并清空權(quán)限
30、系統(tǒng)中登陸用戶的信息。*/public static void logout() try SecurityContextHolder.clearContext(); finally DoradoContext context = DoradoContext.getContext(); context.removeAttribute(DoradoContext.SESSION , userSessionKey );URL 保護(hù) FilterChainProxy為了讓權(quán)限框架可以對(duì)web應(yīng)用系統(tǒng)的URL請(qǐng)求添加安全認(rèn)證,我們需要在web.xml中增加一個(gè)Filter配置:vfiltervfilte
31、r-name Acegi Filter Chain Proxy org.acegisecurity.util.FilterToBeanProxy targetClass org.acegisecurity.util.FilterChainProxy Acegi Filter Chain Proxy /* 組件以及Dataset保護(hù)如果在URL控制之外,我們還希望控制頁(yè)面內(nèi)部的組件元素,則我們可以利用dorado組件提供的visible,ignored,enable,disabled,readOnly等屬性進(jìn)行更細(xì)的控制(屬性的處理效果可以參考dorado中的Role部分)。為了實(shí)現(xiàn)這些控制我們
32、就需要對(duì)所有需要實(shí)現(xiàn)權(quán)限控制的元素在數(shù)據(jù)表Resource中建立相關(guān)聯(lián)的資源記錄,然后允許權(quán)限控id= autoProxyCreator制系統(tǒng)對(duì)這個(gè)資源做角色授權(quán)設(shè)定。在Resource表中添加權(quán)限資源時(shí),對(duì)于資源的resStri ng字段,在權(quán)限系統(tǒng)中有唯一性要求,作為命名的一個(gè)建議,我們建議可以使 用視圖模型的package路徑作為resString 的一部分。如:com.hr.customer.li nkma n.datasetli nkma n.employeeld這樣我們就可以在運(yùn)行期間對(duì)datasetLinkMan的employeeId字段通過(guò)SecurityUtils 類的aut
33、hentication方法通過(guò)驗(yàn)證當(dāng)前登錄帳號(hào)對(duì)該資源是否擁有權(quán)限來(lái)動(dòng)態(tài)確定該字段的權(quán)限設(shè)定信息,如可見(jiàn)性,可編輯特性等等。步驟一:設(shè)定Setting.xml 文件中view.defaultViewModel屬性的值為用視圖模型的package路徑作為resString 的一部分。如:org.marmot.security.dorado.SecurityViewModel或配置為繼承自該類的ViewModel的實(shí)現(xiàn)類;步驟二:需要設(shè)置 View的safe屬性為true,如果設(shè)置為true,系統(tǒng)在運(yùn)行時(shí)則會(huì)自 動(dòng)的觸發(fā)組件權(quán)限filter機(jī)制,按照權(quán)限設(shè)定處理 dataset中字段或表格中列等的
34、可見(jiàn) 可操作特性;步驟三:添加需要實(shí)現(xiàn)權(quán)限控制的資源信息,可手工添加也可以利用框架中提供的資源分類維護(hù)提供的利用視圖模型自動(dòng)導(dǎo)入資源功能初始化資源列表。對(duì)于這種初始化形式對(duì)資源串的定義有著其特殊的要求,例如如果我們要設(shè)定按鈕的disabled或ignored屬性從而達(dá)到按鈕本身的可操作性,可見(jiàn)性。則在Resoruce表中我們就必須定義兩個(gè)資源串:XXX.XXX.XXX.butto nSave.disabledXXX.XXX.XXX.butto nSave.ig nored其中字符串的最后一部分需要與對(duì)象的屬性相關(guān)。便于過(guò)濾功能執(zhí)行時(shí)找到匹配的組件屬性進(jìn)行動(dòng)態(tài)設(shè)定。分類維護(hù)頁(yè)面提供的向?qū)Чδ芤舱?/p>
35、是基于該字符串命名規(guī)則生成視圖模型對(duì)應(yīng)的 資源串的。步驟四:在角色授權(quán)界面中利用生成好的資源串對(duì)角色進(jìn)行資源授權(quán)操作。方法保護(hù) autoProxyCreatorautoProxyCreater主要實(shí)現(xiàn)對(duì)系統(tǒng)中方法的安全管理,如果系統(tǒng)是基于spring實(shí)現(xiàn),則我們只要將需要保護(hù)的JavaBean配置到這個(gè)對(duì)象中,。例如,假設(shè)你希望保護(hù)marmot.roleManager禾口 marmot.userManager,marmot.userRoleManagerbeanclass= org.springframework.aop.framework.autoproxy.BeanNameAutoProx
36、yCreator marmot.methodSecuritylnterceptorv/listvproperty name= beanNames marmot.roleManager marmot.userManager而系統(tǒng)如果不是基于Spring架構(gòu),則我們就無(wú)法依賴AOP對(duì)方法做權(quán)限控制了,不過(guò)最差情況下我們依然可以通過(guò)SecurityUtils 中的authentication方法判斷用戶的方法調(diào)用權(quán)限。除了 autoProxyCreater 之外,我們還需要在系統(tǒng)資源中定義方法保護(hù)的資源串。并將資源串的操作權(quán)限提供給某些角色。資源串的定義規(guī)則如下:包名+類名+方法名女口: e路徑作為
37、resString 的一部分。如:org.marmot.security.ma nager.UserMa nager.saveUser對(duì)于資源串的定義也允許用戶使用匹配符號(hào),如:org.marmot.security.ma nager.UserMa nager.save2.1.2使用說(shuō)明權(quán)限資源維護(hù)系統(tǒng)中的權(quán)限資源可以通過(guò)/security.resource.d 打開,如下圖:可以在該頁(yè)面中對(duì)資源進(jìn)行維護(hù)管理,添加各種URL資源,組件資源和方法資源。以系統(tǒng)中的帳號(hào)管理可以通過(guò)/security.user.d打開,如下圖YlX及可以在該頁(yè)面對(duì)指定的資源進(jìn)行角色權(quán)限指派。系統(tǒng)帳號(hào)維護(hù)虞盍JSWL1
38、NhdlTHMtr.faPlitMEX尸 MH也可以在該頁(yè)面維護(hù)用戶所屬的角色信息。角色維護(hù)IJFUFrun EbonamHrlnzrt.arCing/D fll|l I?t Si?t gmairJt.sti.ulazonlDramsrnToJTQP m srrotac cuntv 疋艸DfQ 口 i! ITijt.St UfltYora rn srmcrt.sr rurt .icew系統(tǒng)中的角色管理可以通過(guò)/security.role.d打開,如下圖譏矗10 將”帕頁(yè)施度1 粉同事可以指派多個(gè)用戶給一個(gè)角色。資源分類通過(guò)系統(tǒng)帳號(hào),角色,資源維護(hù)三個(gè)界面基本上已經(jīng)可以完成系統(tǒng)的權(quán)限設(shè)定管理。另
39、外權(quán)限框架中提供了權(quán)限資源的分類管理功能,權(quán)限資源分類管理主要是為了在系統(tǒng)中權(quán)限資源過(guò)多時(shí),用戶可以對(duì)現(xiàn)有資源進(jìn)行分類和重新組織,方便管理。授權(quán)時(shí)也允許直接對(duì)一個(gè)分類進(jìn)行統(tǒng)一的授權(quán)。方便用戶操作。該頁(yè)面對(duì)應(yīng)的URL為/security.category.d ,如下圖:權(quán)限資源分類中,大多數(shù)情況都是以菜單來(lái)分類,在上圖我們看到的資源分類就是如此,在framework 中已經(jīng)提供了一個(gè)菜單維護(hù)域模型。為了方便的直接引用已有的域模型 和模型之間的父子關(guān)系,在資源分類維護(hù)頁(yè)面中特別提供了一個(gè)菜單導(dǎo)入的向?qū)Т翱?。在?gòu)建完資弋贊源目尹rX刪除卜 刪隙當(dāng)前旅且民子分類K辱入視翻貝規(guī)組件元素 至耳人棄單目錄蟲
40、駆-.黑戀嫌口錄A權(quán)陌営理賀鮒覺(jué)皿 資晅色理*耳戶豈理 至邑卷豐弟邑技百 角電件理這樣我們就能利用現(xiàn)有的菜單域模型對(duì)象的關(guān)系來(lái)構(gòu)建一個(gè)資源分類結(jié)構(gòu)。 源分類結(jié)構(gòu)之后,就可以在相應(yīng)資源分類中添加資源項(xiàng):跑首衛(wèi)F用戶首珂 Dtvii* ttHM削色晉圧旬色盤猊m色弋理+名森朋亀臭型 EibieIJRLwojHitv.uf Dfjd審誣歳NSiSli?理勻例如上圖,我們就可以在用戶管理中添加各種所需要的資源內(nèi)容:請(qǐng)求,需要保護(hù)的方法等。一個(gè)頁(yè)面中所包含的各種組件如果要作為權(quán)限資源添加進(jìn)來(lái), 一般而言,頁(yè)面所包含的組件內(nèi)容比較多,手工輸入過(guò)于繁瑣,視圖模型中導(dǎo)入組件權(quán)限資源信息的向?qū)Т翱凇?51各種需
41、要控制的 URL也可以在此處添加,但是于是這兒提供了一個(gè)從-亡貿(mào)源目錄”權(quán)限管理資源分樂(lè)昔理資源苛理用戶管鬧角色昔垂 軸色按芯 角色代勇舔加費(fèi)灑另類刑除刪尊當(dāng)前竹類M及子分類-導(dǎo)入視閤檯型組件元索Ig導(dǎo)入棄單目錄向?qū)Т翱谛枰斎胍粋€(gè)視圖模型資源的資源位置配置信息,這樣向?qū)Ь涂梢愿鶕?jù)這個(gè)資源獲取其中的詳細(xì)組件信息,如下圖:L10004工具執(zhí)行結(jié)束后,會(huì)自動(dòng)地將指定資源的組件信息生成到Resource 表中,如下圖:用戸皆理 Datasets d 3t a cctuti Gra mtcdRol cf* datacctGcantedKolft: datasctUser dats an ere Pv
42、/crbuttonHid-Grantedc on ne n z lo dr rUserJ n 2azTe h. rttn nR -thl pLJn &日 nt =dF cl pq biNlciriR 円 “01弓4廣 cnidAddlerRQlA iddLbLittonudste _ ssr f ubUtr組件生成的權(quán)限資源會(huì)根據(jù)命名規(guī)則自動(dòng)創(chuàng)建權(quán)限資源字符串。由于部分組件需要做多種狀態(tài)的控制,如button的disable與visible ,這樣一個(gè)組件就可能有多個(gè)權(quán)限資源與之對(duì)應(yīng)。這樣的話組件本身就成了一種資源分類。組件與資源的映射關(guān)系是可以參考URL 為/security.上文中組件以及
43、 Dataset保護(hù)部分。角色權(quán)限設(shè)定之后我們就可以針對(duì)這些資源設(shè)定角色的訪問(wèn)權(quán)限。訪問(wèn)的permissi on.d D*3事興星1 N麗 recrorF管餌湘海ElijRLr visileWL廠甲審甬施廠 riidalv 4taEBTtE“ dat&ECUnirram-Bdoii?ruatasBt廠訴sHMr 心 dorik說(shuō)FhilL円油g廠 reUonliReid廠 risibia廠 rEddnnlydFidd廠屮勺E自廠 rEadonhfKfliFiBiiS廠 ribier riMidonl|如五曲f利ggwr円軸電r忖F vlbbar rfrjidfrHUd廠 VI5-BSr rMd
44、anhrF麗r viriblt廠 rthidankS牯AeiaII- visiNe-廠 rradnnKf 咄祇土EEIJHETLijtasrt廠 visibla廠 rBddnnly datzobZhangiPwdDdtJEEtIL vishda廠 r&adonhfCcntrds皿F 15 HeURL廠 vliuhla朋L廠叱*.iWiirr可以在角色權(quán)限設(shè)定中統(tǒng)一設(shè)定系統(tǒng)中各種角色的資源訪問(wèn)權(quán)限。 權(quán)限設(shè)定中也允許對(duì) 指定角色進(jìn)行批量授權(quán)(操作技巧:選中TreeGrid的某一個(gè)節(jié)點(diǎn),并右鍵單擊打開快捷 菜單):同時(shí)還支持角色模板設(shè)定功能,允許開發(fā)人員制定角色模板,并將這些角色所對(duì)應(yīng)的權(quán)限信息復(fù)
45、制到其它的角色中,如下選擇被授權(quán)的角色:選擇要復(fù)制的角色模板:權(quán)限代理對(duì)于角色權(quán)限的設(shè)定還支持代理設(shè)置,用于部分用戶可能因?yàn)楣ぷ骰蚱渌蛐枰R時(shí)將自己手中的權(quán)限代理給另一個(gè)指定的用戶,則我們可以通過(guò)/security. userproxy.d設(shè)定?;静僮鞑襟E如下:步驟一:代理給誰(shuí):代理設(shè)定步驟一:您要代理給誰(shuí)楓用戶名號(hào)X廠 Ad mini stntoADMIN*PANLLN步驟二:一個(gè)用戶可能有多種角色,用戶可以選擇將自身的某一個(gè)具體角色代理出去:步驟三:設(shè)置代理有限制時(shí)間2.1.3權(quán)限框架如何與用戶系統(tǒng)中的用戶和角色集成在大部分的應(yīng)用系統(tǒng)中都會(huì)有自己的用戶和角色列表,和Marmot-Se
46、curity 集成時(shí),希望直接利用系統(tǒng)中的用戶和角色列表,而不是 Marmot提供的用戶角色列表。則我 們呢可以通過(guò)定義一個(gè) UserRoleService 繼承自org.marmot.security.service.impl.HibernateUserRoleService,并實(shí)現(xiàn)其中的四個(gè)方法:要使Marmot Framework能夠與其他的權(quán)限實(shí)現(xiàn)方式集成需要利用Authorizer接口,該接口的聲明如下:/*Role的name屬性必須以ROLE_作為前綴loadProxy 為true時(shí),返回角色列表中需要同時(shí)boolea nloadProxy);根據(jù)登錄帳號(hào)獲取用戶對(duì)象其中 User
47、的statusFlag 屬性為True情況下該用戶才有效,才有可能使用該系統(tǒng) User的root屬性為true時(shí),表示該用戶為超級(jí)管理員,將不參與到所有權(quán)限判斷運(yùn)算中,可以使用系統(tǒng)中的所有資源 log in id,pwsswd屬性為用戶登錄本系統(tǒng)的系統(tǒng)帳號(hào)和密碼,必須初始化param accountreturn*/publicUser getUserByAccou nt(Stri ng accou nt);/*根據(jù)指定的角色I(xiàn)D信息返回角色對(duì)象,其中Role的name屬性必須以ROLE_作為前綴param idreturn*/Role getRole(String id);/*獲取所有的角色,
48、其中 Role的name屬性必須以ROLE_作為前綴* return*/public List getAllRoles();/*根據(jù)用戶獲取所屬角色列表,其中*如果要實(shí)現(xiàn)代理功能,則需要在實(shí)現(xiàn) 包括代理的角色信息*param userparam loadProxyreturn*/List getRolesByUser(User user,以上五個(gè)方法主要是幫組我們?cè)赟ecurity系統(tǒng)中重建User與Role的相互關(guān)系。另外系統(tǒng)中還會(huì)自動(dòng)的校驗(yàn)密碼,當(dāng)我們利用SecurityUtils 的login方法在權(quán)限系統(tǒng)中注冊(cè)登錄信息時(shí),系統(tǒng)運(yùn)行時(shí)還會(huì)調(diào)用 getUserByAccount方法獲得的U
49、ser對(duì)象的accountld 和passwd 與login注冊(cè)信息做比較, 對(duì)于passwd的比較,為了更安全的 角度考慮,提供了 marmot.passwordEncoder來(lái)負(fù)責(zé)校驗(yàn),便于支持不同的密碼校驗(yàn)算法。系統(tǒng)默認(rèn)采用 MD5,如果你的加密機(jī)制不是MD5,則可以自定義paramaccount 帳號(hào).paramreturnresource 資源項(xiàng).是否有權(quán)訪問(wèn).viders.e ncodi ng.PasswordE ncoder的實(shí)現(xiàn)類。實(shí)現(xiàn)其中的isPasswordValid 方法,其中rawPass為用戶登錄所使用的密碼,encPass為
50、getUserByAccount 返回的 User對(duì)象中的passwd 屬性。boolea nisPasswordValid(Str ingen cPass, Stri ng rawPass, Object salt)throws DataAccessExcepti on;2.2集成其他的權(quán)限實(shí)現(xiàn)方式要使Marmot Framework能夠與其他的權(quán)限實(shí)現(xiàn)方式集成需要利用Authorizer接口,該接口的聲明如下:package org.marmot.framework.security;/*權(quán)限驗(yàn)證器的接口 .* author Benny Bao*/ public interface Aut
51、horizer /*根據(jù)傳入的帳號(hào)信息和資源項(xiàng)進(jìn)行權(quán)限驗(yàn)證,并返回邏輯值表示該帳號(hào)是否有權(quán)訪問(wèn)這一資源*/public boolean isAuthorized(Account account, Object resource);根據(jù)Marmot Framework默認(rèn)提供的 AccessChecker 的實(shí)現(xiàn)類(見(jiàn) dorado 的setti ng.xml中的security.accessChecker配置項(xiàng),其值為org.marmot.framework.dorado.MarmotAccessChecker)。當(dāng) dorado 將要驗(yàn)證Action (特指dorado mapping 中的
52、Action )的訪問(wèn)權(quán)限時(shí)傳給 isAuthorized 方法 的resource 參數(shù)是此 Action 對(duì)應(yīng)的URI路徑,例如:/controller1.action;而當(dāng)驗(yàn)證ViewModel的訪問(wèn)權(quán)限時(shí)傳給 isAuthorized 方法的resource參數(shù)是ViewModel的名稱,例如: com.mycompay.myapp.T estView。完成了 Authorizer的實(shí)現(xiàn)類之后,將其配置到WEB-INF/configs/marmot-framework-context.xml的 marmot. authorizer 中。2.3利用Marmot Framework對(duì)應(yīng)用進(jìn)
53、行權(quán)限控制要真正的使 Marmot Framework的權(quán)限機(jī)制生效,有以下幾種方式:對(duì)Mapping 中的Controller 和Action 進(jìn)行權(quán)限驗(yàn)證將需要進(jìn)行權(quán)限驗(yàn)證的Controller的safe屬性設(shè)為true。這樣,當(dāng)用戶訪問(wèn)此Controller 時(shí),dorado 將自動(dòng)激活 org.marmot.framework.dorado.MarmotAccessChecker,由此最終激活配置在Spring中的Authorizer的實(shí)現(xiàn)類。在這樣情況下傳入 isAuthorized 方法的resource參數(shù)是此 Action 對(duì)應(yīng)的URI路徑,例如:/controller1.ac
54、tion。對(duì)ViewModel 進(jìn)行權(quán)限驗(yàn)證將需要進(jìn)行權(quán)限驗(yàn)證的ViewModel的safe屬性設(shè)為true。這樣當(dāng)用戶訪問(wèn)此ViewModel 時(shí),Marmot Framework 將自動(dòng)激活 Authorizer的實(shí)現(xiàn)類。并且,在這樣情況下傳入isAuthorized 方法的resource參數(shù)是ViewModel的名稱,例如:com.mycompay.myapp.TestView 。利用EL表達(dá)式對(duì)ViewModel中的控件進(jìn)行權(quán)限驗(yàn)證Marmot Framework中提供了一中新的 EL表達(dá)式語(yǔ)法。例如: $security.isAuthorized(xxxx) ,此處的xxxx就是將
55、要傳入 Authorizer 的實(shí)現(xiàn)類中 isAuthorized 方法的resource參數(shù)。只要將此表達(dá)式放入某表格列的visible屬性,就可以利用權(quán)限系統(tǒng)控制該列的可見(jiàn)性了。為了避免在使用此 EL表達(dá)式時(shí)的邏輯運(yùn)算和降低程序員犯錯(cuò)的可能性,security表達(dá)式還提供了其他一些快捷方法,例如:?在控件的 ignored 屬性中可以使用 $security. isIgnored (xxxx)。? 在 Butt on 的 disabled 屬性中可以使用 $security. isDisabled(xxxx) 。? 在 Dataset 的 read On ly 屬性中可以使用 $secur
56、ity. isReadO nly (xxxx)。security表達(dá)式的詳細(xì)用法可以參考 org.marmot.framework.dorado.SecurityExpHa ndler的實(shí)現(xiàn)代碼。由于resource名稱對(duì)于整個(gè)系統(tǒng)而言是全局唯一的,所以resource字符串往往會(huì)很長(zhǎng),為了避免開發(fā)者總是要在 security表達(dá)式中輸入過(guò)長(zhǎng)的resource字符串。Marmot Framework 中支持以下兩種方式為 resource字符串自動(dòng)添加前綴:?如果希望為某一個(gè)resource字符串自動(dòng)添加 ViewModel的名稱作為其前綴,可以在resource 字符串之前加一個(gè) .。例如:
57、$security. isReadOnly (.editorPrice),這樣,最終調(diào)用 Authorizer 的 isAuthorized 方法時(shí), Marmot Framework 會(huì)將 ViewModel 的名稱拼在.editorPrice 之前,生成 諸女口 com.mycompay.myapp.TestView.editorPrice 這樣的 resource 參數(shù)。?在使用上面的方法時(shí)如果我們希望在resource字符串之前添加指定的前綴,那么還需要在ViewModel 的properties中添加一個(gè)名為系統(tǒng)的主框架頁(yè)面往往被放置在一個(gè)子web的根目錄中)。同時(shí),在的 org.m
58、armot.ConfigureInitializer項(xiàng)用來(lái)配置此文件夾的位置。例如:security.resourcePrefix 屬性。例如添加一個(gè)security.resourcePrefix 屬性, 定義其值為testPrefixed-。這樣對(duì)于 $security. isReadOnly (.editorPrice) 而言,最終傳入 isAuthorized 方法的resource參數(shù)將是” testPrefixed-editorPrice。此處特別需要注意的時(shí),在此種用法下MarmotFramework 會(huì)首先去掉.editorPrice 中首位的.,然后再與testPrefixed
59、- 進(jìn)行拼裝。3系統(tǒng)主框架配置3.1建立屬于自己主框架參考Marmot Framework中提供的示例應(yīng)用,文件夾中(這不是必須的,您也可以把它們放置在WEB-INF/c on figs/marmot-base-c on text.xml 的配置當(dāng)中,有一個(gè) view.defaultFrameStyle /sample/main/style1 *n*m 丁1*-! !* !*m LTW narm H-m vn LTW EK *H-m vn LTWBW * !vn LTW-*H-m F-r BW -*H-m ,Marmot Framework最終通過(guò) Mapping 文件-marmot.map.
60、xml 中的authentication禾口 mainFrame 這兩個(gè) Controller結(jié)合上面的view.defaultFrameStyle配置來(lái)定位,登錄頁(yè)面和主框架的相關(guān)界面。authentication禾口 mainFrame 的聲明如下:-cofrtroller-Q authentication+ aetlon+ login* logoutA getCaptchaliTiage +i sessionEKpired + accessDenied-卞 minFrrne+ . action*Lti i weicoirieI+I * about 配置中的$pageRoot 都將在運(yùn)行時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度數(shù)據(jù)中心安全防護(hù)與應(yīng)急響應(yīng)合同模板
- 一米菜園認(rèn)養(yǎng)合同范本
- 中標(biāo)監(jiān)控合同范本
- 2025年度高效環(huán)保型聚合氯化鋁采購(gòu)合同
- 2025年度盡職調(diào)查保密協(xié)議期限及保密期限延長(zhǎng)規(guī)定
- 入團(tuán)申請(qǐng)書入團(tuán)的要求
- 2022-2027年中國(guó)鹽酸苯奎胺行業(yè)發(fā)展概況及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 農(nóng)村低保申請(qǐng)書格式
- 中國(guó)冷庫(kù)工作服市場(chǎng)運(yùn)行態(tài)勢(shì)及行業(yè)發(fā)展前景預(yù)測(cè)報(bào)告
- 特困生補(bǔ)助申請(qǐng)書
- 全名校北師大版數(shù)學(xué)五年級(jí)下冊(cè)第三單元達(dá)標(biāo)測(cè)試卷(含答案)
- 新員工入職通識(shí)考試(中軟國(guó)際)
- 四星級(jí)酒店工程樣板房裝修施工匯報(bào)
- 圓翳內(nèi)障病(老年性白內(nèi)障)中醫(yī)診療方案
- 中考物理復(fù)習(xí)備考策略
- 博士后進(jìn)站申請(qǐng)書博士后進(jìn)站申請(qǐng)書八篇
- 小報(bào):人工智能科技科學(xué)小報(bào)手抄報(bào)電子小報(bào)word小報(bào)
- GB/T 41509-2022綠色制造干式切削工藝性能評(píng)價(jià)規(guī)范
- 公安系防暴安全03安檢
- 孫權(quán)勸學(xué)教案全國(guó)一等獎(jiǎng)教學(xué)設(shè)計(jì)
- 企業(yè)生產(chǎn)現(xiàn)場(chǎng)6S管理知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論