一旦你設(shè)置了realm和驗證的方法,你就需要進(jìn)行實(shí)際的用戶登錄處理。一般說來,對用戶而言登錄系統(tǒng)是一件很麻煩的事情,你必須盡量減少用戶登錄驗證的次數(shù)。作為缺省的情況,當(dāng)用戶第一次請求受保護(hù)的資源時,每一個web應(yīng)用都會要求用戶登錄。如果你運(yùn)行了多個web應(yīng)用,并且每個應(yīng)用都需要進(jìn)行單獨(dú)的用戶驗證,那這看起來就有點(diǎn)像你在與你的用戶搏斗。用戶們不知道怎樣才能把多個分離的應(yīng)用整合成一個單獨(dú)的系統(tǒng),所有他們也就不知道他們需要訪問多少個不同的應(yīng)用,只是很迷惑,為什么總要不停的登錄。
Tomcat 4的“single sign-on”特性允許用戶在訪問同一虛擬主機(jī)下所有web應(yīng)用時,只需登錄一次。為了使用這個功能,你只需要在Host上添加一個SingleSignOn Valve元素即可,如下所示:
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
在Tomcat初始安裝后,server.xml的注釋里面包括SingleSignOn Valve配置的例子,你只需要去掉注釋,即可使用。那么,任何用戶只要登錄過一個應(yīng)用,則對于同一虛擬主機(jī)下的所有應(yīng)用同樣有效。
使用single sign-on valve有一些重要的限制:
1> value必須被配置和嵌套在相同的Host元素里,并且所有需要進(jìn)行單點(diǎn)驗證的web應(yīng)用(必須通過context元素定義)都位于該Host下。
2> 包括共享用戶信息的realm必須被設(shè)置在同一級Host中或者嵌套之外。
3> 不能被context中的realm覆蓋。
4> 使用單點(diǎn)登錄的web應(yīng)用最好使用一個Tomcat的內(nèi)置的驗證方式(被定義在web.xml中的<auth-method>中),這比自定義的驗證方式強(qiáng),Tomcat內(nèi)置的的驗證方式包括basic、digest、form和client-cert。
5> 如果你使用單點(diǎn)登錄,還希望集成一個第三方的web應(yīng)用到你的網(wǎng)站中來,并且這個新的web應(yīng)用使用它自己的驗證方式,而不使用容器管理安全,那你基本上就沒招了。你的用戶每次登錄原來所有應(yīng)用時需要登錄一次,并且在請求新的第三方應(yīng)用時還得再登錄一次。當(dāng)然,如果你擁有這個第三方web應(yīng)用的源碼,而你又是一個程序員,你可以修改它,但那恐怕也不容易做。
6> 單點(diǎn)登錄需要使用cookies。