JAAS
SUN的J2EE框架中的JAAS (Java Authentication Authorization Service)提供了靈活和可伸縮的機(jī)制來(lái)保證客戶(hù)端或服務(wù)器端的安全。JAAS強(qiáng)調(diào)的是通過(guò)驗(yàn)證誰(shuí)在運(yùn)行代碼以及它的權(quán)限來(lái)保護(hù)系統(tǒng)免受攻擊。它最偉大的地方是能讓你能夠?qū)⒁恍?biāo)準(zhǔn)的安全機(jī)制,例如:Solaris NIS(網(wǎng)絡(luò)信息服務(wù))、Windows NT、LDAP(輕量目錄存取協(xié)議)等安全服務(wù)便捷的集成到系統(tǒng)中(SUN已經(jīng)提供了這些標(biāo)準(zhǔn)安全機(jī)制的實(shí)現(xiàn)類(lèi))。當(dāng)然我們也可以將我們已有的安全系統(tǒng)集成到JAAS中去,所需要的工作僅僅是一個(gè)安全接口的封裝和配置工作。
在以下的篇幅中,我們將重點(diǎn)說(shuō)明一下JAAS中的安全框架的三個(gè)應(yīng)用
u一個(gè)基于標(biāo)準(zhǔn)NT模式認(rèn)證的應(yīng)用,
u基于自定義安全模式的應(yīng)用
uJAAS在Web上的應(yīng)用
[JAAS整體框架]
 
 在應(yīng)用程序中使用JAAS驗(yàn)證的步驟:
下面是一個(gè)簡(jiǎn)單的例子:
?
讓我們先看代碼中涉及到的核心JAAS類(lèi)和接口。這些類(lèi)可以被分為三種類(lèi)型:
u?普通類(lèi)型Subject,Principal,憑證
u?驗(yàn)證LoginContext,LoginModule,CallBackHandler,Callback
u?授權(quán)Policy,AuthPermission,PrivateCredentialPermission
上面列舉的類(lèi)和接口大多數(shù)都在javax.security.auth包中。在J2SE1.4中,還有一些接口的實(shí)現(xiàn)類(lèi)在com.sun.security.auth包中。?
應(yīng)用JAAS框架
?
配置部分
上面已經(jīng)提到,JAAS的可擴(kuò)展性來(lái)源于它能夠進(jìn)行動(dòng)態(tài)配置,而配置信息通常是保存在文本。這些文本文件有很多個(gè)配置塊構(gòu)成,我們通常把這些配置塊稱(chēng)作申請(qǐng)(Application)。每個(gè)申請(qǐng)對(duì)應(yīng)了一個(gè)或多個(gè)特定的LoginModule對(duì)象.
當(dāng)你的代碼構(gòu)造一個(gè)LoginContext對(duì)象時(shí),你需要把配置文件中申請(qǐng)的名稱(chēng)傳遞給它。LoginContext將會(huì)根據(jù)申請(qǐng)中的信息決定激活哪些LoginModule對(duì)象,按照什么順序激活以及使用什么規(guī)則激活。
配置文件的結(jié)構(gòu)如下所示:
|   Application?{ ModuleClass?Flag?ModuleOptions; ?ModuleClass?Flag?ModuleOptions; ...?};  | 
下面是一個(gè)名稱(chēng)為Sample的申請(qǐng)
|   Sample?{ com.sun.security.auth.module.NTLoginModule?Rquired?debug=true; ?}  | 
上面這個(gè)簡(jiǎn)單的申請(qǐng)指定了LoginContext對(duì)象應(yīng)該使用NTLoginModule進(jìn)行驗(yàn)證。類(lèi)的名稱(chēng)在ModuleClass中被指定。Flag控制當(dāng)申請(qǐng)中包含了多個(gè)LoginModule時(shí)進(jìn)行登錄時(shí)的行為:Required、Sufficient、Requisite和Optional。最常用的是Required,使用它意味著對(duì)應(yīng)的LoginModule對(duì)象必須被調(diào)用,并且必須需要通過(guò)所有的驗(yàn)證。
DEMO1:集成應(yīng)用NT安全服務(wù)
步驟一?編輯配置文件
其中NTLoginModule是SUN提供的NT驗(yàn)證的實(shí)現(xiàn)類(lèi),我們只要將其配置進(jìn)來(lái)即可
步驟二?應(yīng)用JAAS接口
DEMO2集成非標(biāo)準(zhǔn)的安全服務(wù)
JAAS也能將非標(biāo)準(zhǔn)的安全服務(wù)集成進(jìn)來(lái),對(duì)于非標(biāo)準(zhǔn)的安全服務(wù)的集成,我們需要做的工作是用以有的安全接口來(lái)實(shí)現(xiàn)JAAS的?LoginModule接口和CallBackHandler接口。
步驟一?實(shí)現(xiàn)SampleLoginModule
實(shí)現(xiàn)LoginModule?接口?,實(shí)現(xiàn)4個(gè)方法
u?public?boolean?login()?throws?LoginException??中完成密碼校驗(yàn)工作
u?public?boolean?commit()?throws?LoginException?返回用戶(hù)權(quán)限,保存入Subject對(duì)象
u?public?boolean?abort()?throws?LoginException?中斷用戶(hù)的登陸
u?public?boolean?logout()?throws?LoginException?注銷(xiāo)
步驟二?實(shí)現(xiàn)CallBackHandler
實(shí)現(xiàn)CallbackHandler接口,實(shí)現(xiàn)
public?void?handle(Callback[]?callbacks)?主要是獲得用戶(hù)認(rèn)證信息
步驟三?在JAAS中集成
類(lèi)似DEMO1的NT安全服務(wù)的集成
DEMO3?在Web上應(yīng)用JAAS框架
現(xiàn)在我們希望將通過(guò)命令行調(diào)用的程序一直到Web應(yīng)用程序中。由于Web應(yīng)用程序與一般的應(yīng)用程序的交互方式有區(qū)別不同,我們將不能使用JAAS提供的標(biāo)準(zhǔn)Callback和CallbackHandler類(lèi)。因?yàn)槲覀儾荒茉?/span>Web程序中打開(kāi)一個(gè)命令窗口讓用戶(hù)輸入信息。在這種情況下我們可以在創(chuàng)建LoginContext對(duì)象前先初始化一個(gè)Subject對(duì)象,在Subject對(duì)象的憑證中保存用戶(hù)名和密碼。然后我們可以將該Subject對(duì)象傳遞給LoginContext的構(gòu)造函數(shù)。?
|    String?user?=?request.getParameter("user");  | 
總結(jié)
                            
                        - 上一篇: 法国标致雪铁龙汽车公司采用通快碟片激光器
 - 下一篇: MySQL数据导入导出(一)