我試圖巢國度在Tomcat的7.0.32如下(這裏寫的僞XML):的Tomcat 7築巢CombinedRealm,LockoutRealm和DataSourceRealm
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
這似乎並不工作 - 是有可能在Tomcat中將Realm嵌套兩個以上的級別?我得到一個警告在日誌中:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
背後的想法是,網絡服務具有一定不會像在一些挑剔的用戶(例如,作爲DOS)和一些普通用戶,這可能有弱密碼, lockoutRealm應該處於活動狀態。我相信其他人一直處於這種情況。
如果還有其他方法可以實現這一點(例如LockoutRealm的白名單),請告訴我。
單點登錄也是需要的。
我猜想用現有的LockoutRealm代碼與一個永遠不會鎖定的帳戶列表是一個選項,但我並不那麼熱衷於編寫自己的Realm,我寧願不在該級別上向Tomcat添加自定義代碼,因爲這會使其他人的設置變得複雜,並且隨着每個Tomcat更新可能會崩潰等。
感謝您的幫助!
這裏是我的測試配置的server.xml中的相關部分:
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.CombinedRealm">
<!-- Lockout realm for the DB users -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- PRIMARY: DataSourceRealm with user DB -->
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="user" userNameCol="username"
userCredCol="password" digest="SHA"
userRoleTable="user_role" roleNameCol="rolename" />
</Realm>
<!-- FALLBACK:
This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
克里斯托弗,非常感謝您的出色答案!我還會看看用戶列表(這可能是我在那裏訂閱的時候了,只有我必須使用太多不同的技術來訂閱所有的用戶列表......)。聽起來像我將無法避免更改/擴展Tomcat代碼,除非官方代碼在不久的將來會支持任意嵌套級別。如果我需要開始更改Tomcat代碼,我可能更願意使用用戶名排除選項來擴展LockoutRealm,或者您是否知道是否存在類似的東西?謝謝! – FelixD
我已經記錄了一個[bug報告](https://issues.apache.org/bugzilla/show_bug.cgi?id=54141)。 –
非常感謝克里斯託弗!對不起,我自己沒有這樣做,現在有點緊張... – FelixD