




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
北京大學(xué)IAAA統(tǒng)一安全系統(tǒng)——服務(wù)集成指導(dǎo)說明書北京大學(xué)計算中心,2006 -PAGE12-項目編號:項目名稱:北京大學(xué)IAAA統(tǒng)一安全系統(tǒng)北京大學(xué)IAAA統(tǒng)一安全系統(tǒng)服務(wù)集成指導(dǎo)說明書文件狀態(tài):[]草稿[√]正式發(fā)布[]正在修改文件標(biāo)識:PKUMIS-IAAA-SI-SPEC當(dāng)前版本:1.0作者:劉云峰李麗完成日期:2014-09-北京大學(xué)計算中心2014年9月-PAGE12-版本歷史版本/狀態(tài)作者參與者起止日期備注草稿0.1版/修改中劉云峰李麗2012-6-25至2012-9
目錄版本歷史 I目錄 II1. 概述 12. IAAA系統(tǒng)功能介紹 13. 關(guān)于IAAA系統(tǒng)升級 14. 前期準(zhǔn)備 15. 認(rèn)證服務(wù)集成 25.1. XML身份信息 25.2. 采用OAUTH協(xié)議實現(xiàn)統(tǒng)一用戶身份認(rèn)證 25.2.1 應(yīng)用系統(tǒng)的登錄重定向 35.2.2 WebService認(rèn)證 4 需要返回用戶信息的認(rèn)證 4 不需要返回用戶信息的認(rèn)證 95.3. Socket認(rèn)證 95.4. DbAuthenticator認(rèn)證 96. 功能權(quán)限集成 96.1. 集成步驟 96.2. 注意事項 116.3. 應(yīng)用示例 117. 數(shù)據(jù)權(quán)限集成 147.1. 集成步驟 147.2. 注意事項 157.3. 應(yīng)用示例 158. 審計服務(wù)集成 188.1. 集成步驟 188.2. 注意事項 208.3. 應(yīng)用示例 209. 其他 209.1. 附件 20概述編寫本文檔的目的是為了指導(dǎo)各應(yīng)用系統(tǒng)與北京大學(xué)IAAA統(tǒng)一安全系統(tǒng)中相關(guān)功能的集成。文檔包含9大部分內(nèi)容:概述,IAAA系統(tǒng)功能介紹,關(guān)于升級,前期準(zhǔn)備,認(rèn)證服務(wù)集成,功能權(quán)限集成,數(shù)據(jù)權(quán)限集成,審計服務(wù)集成,以及其他。IAAA系統(tǒng)功能介紹北京大學(xué)IAAA(Identity,Authentication,Authorization,Auditing)統(tǒng)一安全系統(tǒng)(以下簡稱IAAA),主要包含了身份管理、認(rèn)證服務(wù)、授權(quán)服務(wù)和審計服務(wù)等4大部分功能。身份管理主要是對用戶的電子身份的管理,即采用統(tǒng)一用戶管理,它是IAAA其他服務(wù)的基礎(chǔ)。認(rèn)證服務(wù)是指在建立在IAAA電子身份基礎(chǔ)上的統(tǒng)一身份認(rèn)證,目前系統(tǒng)提供WebService認(rèn)證和Socket認(rèn)證等服務(wù)。授權(quán)服務(wù)是對用戶權(quán)限的管理,主要包括用戶的系統(tǒng)功能權(quán)限、系統(tǒng)數(shù)據(jù)權(quán)限等。審計服務(wù)是對用戶進行關(guān)鍵操作的審計紀(jì)錄,以及由此產(chǎn)生的一系列有關(guān)審計信息的統(tǒng)計分析服務(wù)。關(guān)于IAAA系統(tǒng)升級IAAA系統(tǒng)自2006年9月正式上線以來,支持多個應(yīng)用系統(tǒng)的統(tǒng)一用戶身份管理、認(rèn)證、授權(quán)、和審計服務(wù),為多個應(yīng)用系統(tǒng)提供安全服務(wù)。但是隨著應(yīng)用需求的不斷發(fā)展,IAAA統(tǒng)一安全系統(tǒng)在多方面需要升級,才能滿足不同應(yīng)用系統(tǒng)的需要,為應(yīng)用系統(tǒng)提供更好的安全服務(wù)。2011年下半年開始,對IAAA系統(tǒng)進行升級,主要涉及數(shù)據(jù)庫升級和統(tǒng)一用戶、統(tǒng)一認(rèn)證、權(quán)限管理功能的升級。具體來講,新版本的IAAA系統(tǒng)涵蓋了數(shù)據(jù)庫系統(tǒng)的升級、安全性的增強、BUG的修改、采用Ajax開發(fā)技術(shù)等方面,包括以下內(nèi)容:EUID,用戶屬性,臨時帳號/測試帳號,口令增強、OAUTH協(xié)議方式認(rèn)證、Jar包內(nèi)容,用戶授權(quán)管理、數(shù)據(jù)權(quán)限控制,應(yīng)用系統(tǒng)管理,模塊管理中的序號等,詳細(xì)內(nèi)容請參看《IAAA升級》文檔。前期準(zhǔn)備由IAAA管理員在IAAA中注冊應(yīng)用系統(tǒng),需要準(zhǔn)備的參數(shù)有:應(yīng)用系統(tǒng)ID(以英文字母開頭,可以含有阿拉伯?dāng)?shù)字)、應(yīng)用系統(tǒng)名稱、應(yīng)用系統(tǒng)服務(wù)器IP地址,可以依據(jù)需要為一個應(yīng)用系統(tǒng)ID注冊多個服務(wù)器IP地址。認(rèn)證服務(wù)集成XML身份信息認(rèn)證服務(wù)如果成功,返回的是一個XML串,該XML串中包含認(rèn)證用戶的如下信息:EUID,姓名,拼音縮寫,性別,用戶類別(學(xué)生、職工、校友、校外人員[圖書館讀者,一般系統(tǒng)不需要用]、臨時人員),籍貫,登錄狀態(tài)(開通、禁用),登錄ID,證件編號,證件類型,身份類別(學(xué)生、職工、臨時人員、校友),詳細(xì)類別(學(xué)生分碩士生、博士生、本科生、單證研究生等;職工分在職、離退、博士后、在職職工、離退職工、勞動合同制,另外北醫(yī)有很多別的種類),所在院系代碼,所在院系,管理院系,校區(qū)(北醫(yī)、燕園等),身份狀態(tài)(在校、減離)。該XML用戶身份信息如下所示:統(tǒng)一身份認(rèn)證步驟:IAAA為認(rèn)證集成的應(yīng)用系統(tǒng)提供統(tǒng)一的登錄頁面,應(yīng)用系統(tǒng)登錄前重定向到該頁面。即,用戶從應(yīng)用系統(tǒng)登錄時,將登錄設(shè)置跳轉(zhuǎn)到該頁面。用戶輸入用戶名/口令后如果成功,則產(chǎn)生token并重定向到應(yīng)用系統(tǒng)驗證token的地址。不成功,返回錯誤信息。應(yīng)用系統(tǒng)提供客戶端IP、應(yīng)用ID、token、時間戳、消息摘要等參數(shù)調(diào)用token驗證WebService,獲取所需用戶信息。應(yīng)用系統(tǒng)的登錄重定向如果用戶賬號全部是綜合信息服務(wù)賬號,(以人事系統(tǒng)為例)在login.html文件修改頁面如下:<body><divalign="center"style="color:#BB0000;font-family:MicrosoftYahei;font-size:24px;font-weight:bold;margin:20px20px20px20px;"><p>正在轉(zhuǎn)向北京大學(xué)身份認(rèn)證系統(tǒng)</p></div><scriptlanguage=javascript> document.write("<formaction='/iaaa/oauth.jsp'method=postname='formx1'style='display:none'>"); document.write("<inputtype=hiddenname='appID'value='hrms'>"); document.write("<inputtype=hiddenname='appName'value='北京大學(xué)人事綜合信息服務(wù)系統(tǒng)'>"); document.write("<inputtype=hiddenname='redirectUrl'value='http://162.105.*.*:7001/hrms/ssologin.do'>"); document.write("</form>"); setTimeout("document.formx1.submit();",1000); </script></body> 規(guī)范三個參數(shù):appID、appName、redirectUrl,由應(yīng)用系統(tǒng)提供正確的值:appID——注冊的應(yīng)用系統(tǒng)IDappName——注冊的應(yīng)用系統(tǒng)名稱redirectUrl——應(yīng)用系統(tǒng)回調(diào)地址,即應(yīng)用系統(tǒng)驗證token的地址應(yīng)用系統(tǒng)的登錄頁面重定向到IAAA的統(tǒng)一登錄頁面,如下:如果系統(tǒng)還管理其他內(nèi)部賬號,增加內(nèi)部賬號登錄功能。登錄頁面如下圖:代登錄頁面代碼片段如下面的示例:<bodybgcolor="#DDDDDD"> <divalign="center"style="color:#BB0000;font-family:MicrosoftYahei;font-size:24px;font-weight:bold;margin:20px20px20px20px;"><p>正在轉(zhuǎn)向北京大學(xué)身份認(rèn)證系統(tǒng)</p></div> <scriptlanguage=javascript> document.write("<formaction='/iaaa/oauth.jsp'method=postname='formx1'style='display:none'>"); document.write("<inputtype=hiddenname='appID'value='dataPubSub'>"); document.write("<inputtype=hiddenname='appName'value='北京大學(xué)綜合數(shù)據(jù)發(fā)布平臺'>"); document.write("<inputtype=hiddenname='redirectUrl'value='http://162.105.*.*:7001/dataPub/ssologin.do'>"); document.write("<inputtype=hiddenname='redirectLogonUrl'value='http://162.105.*.*:7001/dataPub/ssologinIn.do'>"); document.write("</form>"); setTimeout("document.formx1.submit();",1000); </body>規(guī)范四個參數(shù):appID、appName、redirectUrl、redirectLogonUrl。由應(yīng)用系統(tǒng)提供正確的值。參數(shù):由應(yīng)用系統(tǒng)提供appID——注冊的應(yīng)用系統(tǒng)IDappName——注冊的應(yīng)用系統(tǒng)名稱redirectUrl——應(yīng)用系統(tǒng)回調(diào)地址,即應(yīng)用系統(tǒng)驗證token的地址redirectLogonUrl——應(yīng)用系統(tǒng)自有用戶登錄地址。認(rèn)證成功后,IAAA生成token,并自動重定向到應(yīng)用系統(tǒng)驗證token的地址。新北京大學(xué)身份認(rèn)證服務(wù)支持用戶使用別名(北大郵箱名)登錄,即可使用學(xué)號、職工號或北京大學(xué)郵箱名登錄。Token驗證WebService驗證應(yīng)用系統(tǒng)提供的Token,并依據(jù)需要返回用戶信息。需要返回用戶信息的驗證WebService地址/iaaaWS/OauthLogon?WSDL驗證方法:publicResultuserLogon(StringremoteAddr,StringappID,Stringtoken,longtimestamp,StringmsgAbstract)傳入?yún)?shù):remoteAddr——客戶端IPappID——應(yīng)用系統(tǒng)IDtoken——系統(tǒng)用戶登錄用的tokentimestamp——當(dāng)前時間戳msgAbstract——消息摘要,加密方法MD5(remoteAddr+appID+token+timestamp+key)注意事項:應(yīng)用系統(tǒng)ID和應(yīng)用系統(tǒng)服務(wù)器IP,需要提前向IAAA注冊;消息摘要msgAbstract:MD5(remoteAddr+appID+token+timestamp+Key),其中Key由IAAA提供,具體實施時請向IAAA索要返回類型定義Result{intstatus;/*操作狀態(tài)*/Stringinfo;/*相關(guān)信息*/}status描述了認(rèn)證操作返回狀態(tài),0為成功,其他為失敗。具體說明如下:認(rèn)證成功,status=0,info=用戶身份信息,XML串;[不再使用]用戶名不存在,status=1,info=“用戶名不存在”;token無效或過期,status=2,info=“token無效或過期”;客戶調(diào)用程序ID錯誤,status=3,info=“客戶調(diào)用程序ID錯誤”;客戶調(diào)用程序IP匹配錯誤,status=4,info=“客戶調(diào)用程序IP匹配錯誤”;消息摘要匹配錯誤,status=5,info=“消息摘要匹配錯誤”;[不再使用]客戶端IP錯誤,status=6,info=“客戶端IP錯誤”。該用戶在該系統(tǒng)中以IP登錄封禁,status=7,info=“該用戶在該系統(tǒng)中以IP登錄封禁”。該用戶已被封禁,status=8,info=“該用戶已被封禁”登錄太頻繁,請稍后再試,status=9,info=“登錄太頻繁,請稍后再試”未知錯誤,stauts=10,info=“未知錯誤”如下給出一個職工正確登錄之后的返回信息。<env:Envelopexmlns:env="/soap/envelope/">
<env:Header/>
<env:Body>
<m:userLogonResponsexmlns:m="http://pku/iaaa/webservice">
<m:return>
<java:Infoxmlns:java="java:pku.iaaa.webservice.wsModel"><iaaa:personxmlns:iaaa="/IAAA"><iaaa:euid>xxxxxxxxxx</iaaa:euid><iaaa:name>張三</iaaa:name><iaaa:pinyinAbbr>zs</iaaa:pinyinAbbr><iaaa:sex>男</iaaa:sex><iaaa:userType>職工</iaaa:userType><iaaa:status>開通</iaaa:status><iaaa:logonid>00061xxxxx</iaaa:logonid><iaaa:identityId>xxxxxxx</iaaa:identityId><iaaa:identityType>職工</iaaa:identityType><iaaa:detailType>在職</iaaa:detailType><iaaa:deptId>00001</iaaa:deptId><iaaa:dept>數(shù)學(xué)學(xué)院</iaaa:dept><iaaa:deptAdmin/><iaaa:campus>燕園</iaaa:campus><iaaa:identityStatus>在校</iaaa:identityStatus></iaaa:person></java:Info>
<java:Statusxmlns:java="java:pku.iaaa.webservice.wsModel">0</java:Status>
</m:return>
</m:userLogonResponse>
</env:Body>
</env:Envelope>應(yīng)用示例本文以axis為例介紹WebService認(rèn)證集成方式。importjava.io.Serializable;publicclassResultimplementsSerializable{ publicStringInfo;publicintStatus;}importjava.rmi.RemoteException;importspace.QName;importjavax.xml.rpc.ParameterMode;importjavax.xml.rpc.ServiceException;importjavax.xml.rpc.encoding.XMLType;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.axis.encoding.ser.BeanDeserializerFactory;importorg.apache.axis.encoding.ser.BeanSerializerFactory;importorg.apache.log4j.Logger;publicclassTestCase{ privatestaticStringnameSpace="http://pku/iaaa/webservice"; privatestaticfinalStringurl="/iaaaWS/OauthLogon"; privatestaticServiceservice=newService(); privatestaticLoggerlogger=Logger.getLogger(TestCase.class); publicStringbytes2HexString(byte[]b)//byte轉(zhuǎn)換為十六進制{Stringret="";for(inti=0;i<b.length;i++){Stringhex=Integer.toHexString(b[i]&0xFF);if(hex.length()==1){hex='0'+hex;}ret+=hex.toUpperCase();}returnret;}publicResultvalidateToken()throwsServiceException,RemoteException{Callcall=(Call)service.createCall();call.setTargetEndpointAddress(url);call.setEncodingStyle(nameSpace);//傳非字符串類型參數(shù)需要明確QNameqn=newQName(nameSpace,"Result");call.setReturnType(qn,Result.class);call.registerTypeMapping(Result.class,qn,BeanSerializerFactory.class,BeanDeserializerFactory.class);call.setOperationName(newQName(nameSpace,"userLogon"));call.addParameter("remoteAddr",XMLType.XSD_STRING,ParameterMode.IN);call.addParameter("appID",XMLType.XSD_STRING,ParameterMode.IN);call.addParameter("token",XMLType.XSD_STRING,ParameterMode.IN);call.addParameter("timestamp",XMLType.XSD_LONG,ParameterMode.IN);call.addParameter("msgAbstract",XMLType.XSD_STRING,ParameterMode.IN);StringremoteAddr="IP"StringappID="hrms";Stringtoken="token4hrms";longtimestamp=newjava.util.Date().getTime();Stringkey="md5key4hrms";StringmsgBofore=remoteAddr+appID+token+timestamp+key;Stringmsg="";try{ byte[]msgByte=java.security.MessageDigest.getInstance("MD5").digest(msgBofore.getBytes()); msg=this.bytes2HexString(msgByte);}catch(Exceptione){ logger.error("MSGFAULT.",e);}Resultuser=(Result)call.invoke(newObject[]{remoteAddr,appID,token,timestamp,msg});returnuser; }publicstaticvoidmain(String[]args){ TestCasetc=newTestCase(); try{ Resultrs=tc.validateToken(); if(rs!=null){ System.out.println("STATUS:"+rs.Status); System.out.println("INFO:"+rs.Info); } else System.out.println("RESULTISNULL"); }catch(RemoteExceptione){ logger.fatal("Exception",e); }catch(ServiceExceptione){ logger.fatal("Exception",e); } catch(Exceptione){ logger.fatal("Exception",e); }}}不需要返回用戶信息的認(rèn)證WebService地址/iaaaWS/OauthLogonSimple?WSDL驗證方法publicResultuserLogonSimple(StringappID,Stringtoken,longtimestamp,StringmsgAbstract)參數(shù)定義參見該方法認(rèn)證成功時返回status=0,info=用戶ID,失敗時返回相應(yīng)錯誤描述。單點登錄——代理驗證的統(tǒng)一身份認(rèn)證這種形式簡稱為“代理身份認(rèn)證”,具體情形如下:應(yīng)用O、A、B、C都支持統(tǒng)一身份認(rèn)證,同時用戶登錄應(yīng)用O之后,直接在頁面點擊A、B、C應(yīng)用可以直接進入,無需重新登錄。本文稱此類應(yīng)用O為中心應(yīng)用,其他應(yīng)用為分支應(yīng)用。WebService地址/iaaaWS/TokenValidation?WSDL中心應(yīng)用驗證方法publicProxyResultvalidateWithProxy(StringremoteAddr,StringappID,Stringtoken,StringmsgAbstract)傳入?yún)?shù):remoteAddr——客戶端IPappID——應(yīng)用系統(tǒng)IDtoken——系統(tǒng)用戶登錄用的tokenmsgAbstract——消息摘要,加密方法MD5(remoteAddr+appID+token+key)注意事項:應(yīng)用系統(tǒng)ID和應(yīng)用系統(tǒng)服務(wù)器IP,需要提前向IAAA注冊;消息摘要msgAbstract:MD5(remoteAddr+appID+token+Key),其中Key由IAAA提供,具體實施時請向IAAA索要。返回類型定義Result{intstatus;/*操作狀態(tài)*/
StringgrantToken;/*代理Token*/Stringinfo;/*相關(guān)信息*/} 代理Token用于訪問分支應(yīng)用,操作狀態(tài)和相關(guān)信息具體說明參見。代理訪問分支應(yīng)用調(diào)用如下方法獲得代理訪問分支應(yīng)用的Token,然后傳遞給分支應(yīng)用驗證。publicResultvalidateProxyGrantToken(StringremoteAddr,StringtargetAppId,StringappID,StringgrantToken,longtimestamp,StringmsgAbstract)傳入?yún)?shù)remoteAddr——客戶端IPtargetAppId——分支應(yīng)用系統(tǒng)IDappID——應(yīng)用系統(tǒng)IDgrantToken——代理tokentimestamp——當(dāng)前時間戳msgAbstract——消息摘要,加密方法 MD5(remoteAddr+targetAppId+appID+grantToken+timestamp+key)注意事項:應(yīng)用系統(tǒng)ID和應(yīng)用系統(tǒng)服務(wù)器IP,需要提前向IAAA注冊;消息摘要msgAbstract:MD5中Key由IAAA提供,具體實施時請向IAAA索要。返回類型定義具體參見分支應(yīng)用驗證Token調(diào)用如下方法驗證Token(直接登錄分支應(yīng)用也可采用該方法驗證Token)。publicResultvalidate(StringremoteAddr,StringappID,Stringtoken,StringmsgAbstract)傳入?yún)?shù)remoteAddr——客戶端IPappID——應(yīng)用系統(tǒng)IDtoken——代理tokentimestamp——當(dāng)前時間戳msgAbstract——消息摘要,加密方法MD5(remoteAddr+appID+token+key)注意事項:應(yīng)用系統(tǒng)ID和應(yīng)用系統(tǒng)服務(wù)器IP,需要提前向IAAA注冊;消息摘要msgAbstract:MD5中Key由IAAA提供,具體實施時請向IAAA索要。返回類型定義具體參見注銷中心應(yīng)用代理Token中心應(yīng)用的代理Token在一定時間內(nèi)有效,在退出中心應(yīng)用或者其他必要情況時應(yīng)調(diào)用如下方法注銷代理Token。publicvoidexpireProxy(StringappId,Stringtoken,StringmsgAbs)傳入?yún)?shù)appId——應(yīng)用系統(tǒng)IDtoken——代理tokenmsgAbstract——消息摘要,加密方法MD5(appId+token+key)注意事項:應(yīng)用系統(tǒng)ID和應(yīng)用系統(tǒng)服務(wù)器IP,需要提前向IAAA注冊;消息摘要msgAbstract:MD5中Key由IAAA提供,具體實施時請向IAAA索要。Socket認(rèn)證Socket認(rèn)證方式比較特殊,目前只為內(nèi)網(wǎng)應(yīng)用校園卡系統(tǒng)提供。如果需要集成該認(rèn)證方式,請直接與IAAA聯(lián)系。DbAuthenticator認(rèn)證IAAA系統(tǒng)為北京大學(xué)門戶提供AuthenticationProvider。詳細(xì)配置步驟請參看《Portal部署與維護說明》。功能權(quán)限集成目前該部分服務(wù)只為Java平臺應(yīng)用系統(tǒng)提供。集成步驟由IAAA管理員通過【權(quán)限管理>>系統(tǒng)注冊】功能進行基本信息注冊,并且指定應(yīng)用系統(tǒng)管理員。應(yīng)用系統(tǒng)管理員登錄IAAA網(wǎng)站(),在【權(quán)限管理>>模塊管理】下,登記和管理應(yīng)用系統(tǒng)的功能模塊。應(yīng)用系統(tǒng)管理員登錄IAAA網(wǎng)站(),在【權(quán)限管理>>角色管理】下,登記和管理應(yīng)用系統(tǒng)的用戶角色。在定義角色的時候,可以定義角色規(guī)則以動態(tài)指定角色用戶(即具有該角色的用戶),也可以通過【權(quán)限管理>>用戶授權(quán)】,直接為某一特定用戶賦予指定角色。管理角色權(quán)限,應(yīng)用系統(tǒng)管理員登錄IAAA網(wǎng)站(),在【權(quán)限管理>>角色管理】下,管理指定角色的功能權(quán)限,也可以通過【權(quán)限管理>>>模塊管理】,賦予某個角色訪問指定功能模塊的權(quán)限。組裝用戶屬性對象iaaa.model.authorization.UserProperties,屬性列表如下,具體請參見IAAA的JavaDoc文檔。類名iaaa.model.authorization.UserProperties屬性名類型描述logonIDString登錄帳號deptIDString所在單位編號userTypeString用戶類型,如果有多種身份類型,以英文分號“;”分隔campusString校區(qū)studentTypeString學(xué)生類型facultyTypeString職工類型extAttr1String擴展屬性1extAttr2String擴展屬性2extAttr3String擴展屬性3獲取用戶權(quán)限,調(diào)用類.authorization.UserPermManager的方法:publicUserPermModelretrUserPerm(StringappID,/*應(yīng)用系統(tǒng)ID*/UserPropertiesprop/*用戶屬性*/),返回值為iaaa.model.authorization.UserPermModel,屬性列表如下,具體請參見IAAA的JavaDoc文檔。類名pku.iaaa.model.authorization.UserPermModel屬性名類型描述logonIDString登錄帳號appIDString應(yīng)用系統(tǒng)IDroleMapHashMap用戶角色集合,以角色I(xiàn)D為鍵和值moduleMapHashMap用戶可以訪問的功能模塊集合,以模塊ID為鍵,功能模塊(iaaa.model.authorization.AppPermModel)對象為值,具體請參見IAAA的JavaDoc文檔moduleListList用戶可以訪問的功能模塊集合,元素為功能模塊對象(同上),按照功能序號排序dataPermListList用戶數(shù)據(jù)權(quán)限配置列表,元素為iaaa.model.authorization.DataPermModel,具體請參見IAAA的JavaDoc文檔校驗用戶權(quán)限,一般有兩種方法。一是校驗功能模塊ID,在應(yīng)用系統(tǒng)中應(yīng)該已經(jīng)知道每個功能模塊的ID,依次判斷功能模塊ID是否存在于用戶可以訪問的功能模塊集合中(moduleMap),如果存在,則界面中顯示相應(yīng)模塊,如果不存在,則不顯示。二是校驗功能模塊URL,在配置應(yīng)用系統(tǒng)功能模塊時可以配置其URL,如此可以專門編寫一個過濾器(Filter),使得用戶的所有訪問請求都要經(jīng)過該過濾器過濾,那么在該過濾器中可以判斷用戶請求的URL是否是用戶可以訪問的功能模塊(moduleList)的URL,如果是,則通過過濾,如果不是,則阻塞過濾(如可以跳轉(zhuǎn)到一個特定的異常頁面)。注意事項IAAA需要提供iaaaNew.jar和JavaDoc文檔。需要將IAAA提供的Jar包添加到應(yīng)用系統(tǒng)編譯和運行時可以訪問的CLASSPATH中,如WEB-INFO/lib下。應(yīng)用示例獲取用戶權(quán)限/***獲取logonID,deptID和userType等用戶屬性,這些都可以通過IAAA的認(rèn)證服務(wù)*獲得,其中userType屬性是用戶身份,如果用戶存在多個身份,可以通過英文分號“;”*分隔,如“職工;學(xué)生”*/……//組裝用戶屬性對象UserPropertiesprop=newUserProperties();prop.setLogonID(logonID);prop.setDeptID(deptID);prop.setUserType(userType);//獲取用戶權(quán)限UserPermModelupm=newUserPermManager().retrUserPerm("iaaa",prop);……校驗功能模塊ID//獲取用戶可以訪問的功能模塊,并且存儲在用戶會話中HashMapmoduleMap=upm.getModuleMap();this.getSession().setAttribute(SessionAttr.IAAAEUSER_MODULE,moduleMap);……//在要顯示用戶可以訪問的功能模塊的地方校驗HashMapmodule=(HashMap)request.getSession().getAttribute(SessionAttr.IAAAEUSER_MODULE);……if(module.get(“sampleModuleID”)!=null){//顯示該功能模塊相關(guān)信息和相關(guān)操作……}……校驗功能模塊URL//獲取用戶可以訪問的功能模塊的URL,并且存儲在用戶會話中ListmoduleList=upm.getModuleList();StringmoduleURL=“”;for(inti=0;moduleList!=null&&moduleList.size();i++){AppPermModelmodule=(AppPermModel)modules[i];if(moduleURL.length>0)moduleURL=moduleURL+“;”+module.getModuleURL();elsemoduleURL=module.getModuleURL();}this.getSession().setAttribute(SessionAttr.IAAAEUSER_MODULE_URL,moduleURL);……//Filter中進行校驗……publicclassPrmsFilterimplementsFilter{//過濾器配置protectedFilterConfigfilterConfig=null; publicvoiddestroy(){ this.filterConfig=null; } /***過濾器主要業(yè)務(wù)方法 *@paramrequestServletRequest,Theservletrequestweareprocessing *@paramresultServletResponse,Theservletresponsewearecreating *@paramchainFilterChain,Thefilterchainweareprocessing * *@exceptionIOExceptionifaninput/outputerroroccurs *@exceptionServletExceptionifaservleterroroccurs */ publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain) throwsIOException,ServletException{ HttpServletRequesthrequest=(HttpServletRequest)request;StringmoduleURL=(String)hrequest.getSession().getAttribute(SessionAttr.IAAAEUSER_MODULE_URL);StringurlSplits[]=moduleURL.split(“;”);//獲取當(dāng)前請求路徑Stringpath=hrequest.getServletPath();//校驗URLbooleanvalid=false;for(inti=0;urlSplit!=null&&i<urlSplits.length()&&!valid;i++){if(path.indexOf(urlSplits[i])>=0){valid=true;}}//校驗通過if(valid==true){ try{chain.doFilter(request,response); }catch(Exceptione){ } }//校驗不通過else{request.setAttribute("errorMessage","您尚未登錄或者會話超時,請重新登錄!");RequestDispatcherrd=request.getRequestDispatcher("/logon.jsp");rd.forward(request,response);} } /** *初始化過濾器. * *@paramfilterConfigFilterConfig,Thefilterconfigurationobject */ publicvoidinit(FilterConfigfilterConfig)throwsServletException{ this.filterConfig=filterConfig; }}//Filter配置,在web.xml中添加<filter><filter-name>PrmsFilter</filter-name><filter-class>sample.package.PrmsFilter</filter-class></filter><filter-mapping><filter-name>PrmsFilter</filter-name><url-pattern>/pageflows/*</url-pattern></filter-mapping>權(quán)限服務(wù)IAAA提供了獲取功能權(quán)限的web服務(wù)。Webservice地址/iaaaWS/EuserPerm?WSDL方法獲取用戶的角色publicRoleResult[]getRoleInfo(StringappID,StringuserID,StringabsMsg,StringclientIP)throwsException參數(shù):appID——應(yīng)用IDuserID——用戶名absMsg——消息摘要,MD5(appID+userID+key)獲取用戶的功能權(quán)限publicAppPermModel[]getModuleInfo(StringappID,StringuserID,StringabsMsg,StringclientIP)throwsException參數(shù):appID——應(yīng)用IDuserID——用戶名absMsg——消息摘要,MD5(appID+userID+key)獲取角色的功能權(quán)限publicAppPermModel[]getRoleModuleInfo(StringappID,StringroleID,StringabsMsg,StringclientIP)throwsException參數(shù):appID——應(yīng)用IDuserID——用戶名absMsg——消息摘要,MD5(appID+roleID+key)數(shù)據(jù)權(quán)限集成目前該部分服務(wù)只為Java平臺應(yīng)用系統(tǒng)提供。集成步驟由IAAA管理員通過【權(quán)限管理>>系統(tǒng)注冊】功能進行基本信息注冊,并且指定應(yīng)用系統(tǒng)管理員。應(yīng)用系統(tǒng)管理員登錄IAAA網(wǎng)站(),在【權(quán)限管理>>對象約束】下,登記和管理應(yīng)用系統(tǒng)的“數(shù)據(jù)對象”、“通用約束”和“對象約束”?!皵?shù)據(jù)對象”是指需要約束的數(shù)據(jù)對象,特指某個數(shù)據(jù)表;“通用約束”是指用于約束的某個屬性,特指某個數(shù)據(jù)表的某一列;“對象約束”是指采用了約束的某個數(shù)據(jù)對象,特指“數(shù)據(jù)對象”和“通用約束”的關(guān)聯(lián)。應(yīng)用系統(tǒng)管理員登錄IAAA網(wǎng)站(),在【權(quán)限管理>>角色數(shù)據(jù)權(quán)限】下,登記和管理應(yīng)用系統(tǒng)指定角色的數(shù)據(jù)權(quán)限規(guī)則。也可以通過【權(quán)限管理>>用戶數(shù)據(jù)權(quán)限】,直接登記和管理應(yīng)用系統(tǒng)指定用戶的數(shù)據(jù)權(quán)限規(guī)則。組裝用戶屬性對象pku.iaaa.model.authorization.UserProperties,具體參見“功能權(quán)限集成>>集成步驟”第5步。獲取用戶權(quán)限,具體參見“功能權(quán)限集成>>集成步驟”第6步。獲取用戶數(shù)據(jù)權(quán)限,通過調(diào)用用戶權(quán)限對象的getDataPermList()方法獲取,具體請參見IAAA的JavaDoc文檔??梢圆捎媒Y(jié)果集過濾法應(yīng)用數(shù)據(jù)權(quán)限,步驟如下:執(zhí)行數(shù)據(jù)查詢,獲取結(jié)果集;調(diào)用DataPermManager的方法過濾結(jié)果集(其中第一參數(shù)是過濾前的結(jié)果集,第二個參數(shù)是用戶數(shù)據(jù)權(quán)限集合,第三個參數(shù)是數(shù)據(jù)對象名稱):public<T>List<T>filterWithDataPerm(List<T>originList,List<DataPermModel>dataPermList,StringobjName)或publicAbstractMapfilterWithDataPerm(AbstractMaporiginMap,List<DataPermModel>dataPermList,StringobjName)或publicAbstractMapfilterWithDataPerm(AbstractMapfilteringMap,booleanfilterWithKey,List<DataPermModel>dataPermList,StringobjName)或publicObjectfilterWithDataPerm(Object[]objectArray,List<DataPermModel>dataPermList,StringobjName)或如果對單個對象進行過濾,可以調(diào)用publicObjectfilterWithDataPerm(ObjectoriginObj,ListdataPermList,StringobjName)方法進行過濾。注意事項IAAA需要提供iaaaNew.jar和JavaDoc文檔。需要將IAAA提供的Jar包添加到應(yīng)用系統(tǒng)編譯和運行時可以訪問的CLASSPATH中,如WEB-INFO/lib下。采用數(shù)據(jù)權(quán)限過濾結(jié)果集,“數(shù)據(jù)約束”中的鏈接串必須是[REFACTOR_FILTER];“數(shù)據(jù)對象”對應(yīng)類名必須是一個JavaBean類,或者[NOT_JAVA_BEAN](用于特指java.lang.*的數(shù)據(jù)對象);“通用約束”中的對應(yīng)類名必須是[REFACTOR_PROPERTY],對應(yīng)屬性則是用于約束的屬性名,應(yīng)該有g(shù)et訪問方法;如果“通用約束”與[NOT_JAVA_BEAN]的“數(shù)據(jù)對象”關(guān)聯(lián)生成的“數(shù)據(jù)約束”,則不會訪問“通用約束”指定的屬性,直接將“數(shù)據(jù)對象”的值作為屬性值。應(yīng)用示例配置數(shù)據(jù)對象【權(quán)限管理>>對象約束】,選擇一個應(yīng)用系統(tǒng),然后點擊管理數(shù)據(jù)對象按鈕,打開一個新的TAB頁,可以新增/修改/刪除數(shù)據(jù)對象。修改時雙擊一行,進入修改模式進行操作。刪除時,如果該數(shù)據(jù)對象被對象約束引用,則會有提示信息不允許刪除。配置通用約束【權(quán)限管理>>對象約束】,選擇一個應(yīng)用系統(tǒng),然后點擊管理通用約束按鈕,打開一個新的TAB頁,可以新增/修改/刪除通用約束。修改時雙擊一行,進入修改模式進行操作。刪除時,如果該數(shù)據(jù)對象被對象約束引用,則會有提示信息不允許刪除。配置對象約束【權(quán)限管理>>對象約束】,選擇一個應(yīng)用系統(tǒng),查詢后顯示對象約束列表。點擊新增對象約束,在右邊可以輸入各屬性,保存。雙擊一行,在右邊Form部分可以修改各屬性,保存。選擇一行,可以點擊刪除對象約束刪除。配置角色數(shù)據(jù)權(quán)限【權(quán)限管理>>角色數(shù)據(jù)權(quán)限】,選擇一個應(yīng)用系統(tǒng),查詢后顯示所有角色??梢孕略觥⑿薷?、刪除角色數(shù)據(jù)權(quán)限。點擊新增角色授權(quán),在新的TAB頁可以進行操作。按要求填寫信息,保存。選擇一行,點擊查看或修改角色授權(quán),在新的TAB頁可以進行操作。規(guī)則以樹形形式顯示,可以嵌套定義
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村蓋房簽合同范本
- 鄉(xiāng)鎮(zhèn)庫房建造合同范本
- 創(chuàng)業(yè)老板合同范本
- 1997施工合同范本
- 公司購買材料合同范本
- 保險勞務(wù)合同范本
- mpp管采購合同范本
- app廣告合同范本
- 加盟痘痘合同范本
- 住房公證合同范本
- 思維導(dǎo)圖在初中英語復(fù)習(xí)課中的應(yīng)用研究的中期報告
- 絕對干貨!國有企業(yè)總經(jīng)理辦公會決策事項及總經(jīng)理職責(zé)清單
- 高教社2023馬工程國際私法學(xué)教學(xué)課件u15
- 2022年春新教科版科學(xué)六年級下冊第4單元《物質(zhì)的變化》教案
- 蘇教版六年級下冊數(shù)學(xué) 用“轉(zhuǎn)化”的策略解決問題 教案(教學(xué)設(shè)計)
- 2-變電站安全工器具
- (完整word版)鋼琴五線譜(高音譜號、低音譜號、空白)可
- 紅領(lǐng)巾監(jiān)督崗檢查記錄表
- IT設(shè)備維修申請表
- 地下停車庫設(shè)計規(guī)定
- Python程序設(shè)計課程教學(xué)改革與實踐基于項目教學(xué)模式
評論
0/150
提交評論