LockOutRealm 是一個(gè) Tomcat 的 Realm 實(shí)現(xiàn),它擴(kuò)展了 CombinedRealm,假如在某一段時(shí)間內(nèi)出現(xiàn)很多驗(yàn)證失敗,則它能夠提供鎖定用戶的功能。
為了確保操作的正確性,該 Realm 允許出現(xiàn)較合理的同步。
該 Realm 并不需要對底層的 Realm 或與其相關(guān)的用戶存儲(chǔ)機(jī)制進(jìn)行任何改動(dòng)。它會(huì)記錄失敗的登錄,包括那些因?yàn)橛脩舨淮嬖诘牡卿洝榱朔乐篃o效用戶通過精心設(shè)計(jì)的請求而實(shí)施的 DOS 攻擊(從而造成緩存增加),沒有通過驗(yàn)證的用戶所在列表的容量受到了嚴(yán)格的限制。
子 Realm 是通過在定義 LockOutRealm 的 Realm 元素中內(nèi)嵌 Realm 元素來實(shí)現(xiàn)的。驗(yàn)證操作會(huì)按照 Realm 元素的疊加順序來逐個(gè)進(jìn)行。對逐個(gè) Realm 進(jìn)行驗(yàn)證,從而就能充分證明用戶的身份。
為了配置 CombinedRealm,需要?jiǎng)?chuàng)建一個(gè) 元素,并將其內(nèi)嵌在 或 元素中的 $CATALINA_BASE/conf/server.xml 文件內(nèi)。同樣,你也可以將其內(nèi)嵌到 context.xml 文件下的 節(jié)點(diǎn)。關(guān)于 LockOutRealm 中的屬性定義可參看 Realm 配置文檔。
下面是 server.xml 中的一段代碼,為 UserDatabaseRealm 添加了鎖定功能。
<Realm className="org.apache.catalina.realm.LockOutRealm" >
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/></Realm>