Próbuję Realms gniazdo w następujący Tomcat 7.0.32 (napisane w pseudo-XML):Tomcat 7 zagnieżdżenia CombinedRealm, LockoutRealm i DataSourceRealm
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
nie wydają się działać - jest możliwe jest zagnieżdżanie dziedzin w Tomcat na więcej niż dwóch poziomach? Otrzymuję ostrzeżenie w dziennikach:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
Ideą jest to, że serwis internetowy ma kilka krytycznych użytkowników, że nie muszą być zablokowane (np jak DOS) i kilka zwykłych użytkowników, które mogą mieć słabsze haseł gdzie lockoutRealm powinien być aktywny. Jestem pewien, że w tej sytuacji byli inni ludzie.
Jeśli istnieje inny sposób, aby to osiągnąć (np. Biała lista LockoutRealm), proszę dać mi znać.
Wymagane jest również pojedyncze logowanie.
Domyślam się, że przedłużenie istniejącego kodu LockoutRealm z listą kont, których nigdy nie można zablokować, byłoby opcją, ale nie jestem zbyt chętny do pisania własnego Królestwa, wolałbym raczej nie dodawać niestandardowego kodu na tym poziomie do Tomcat , ponieważ utrudni to konfigurację innym, a przy każdej aktualizacji Tomcat może się zepsuć itp.
Dzięki za pomoc!
Oto odpowiednia część server.xml mojego testu config:
<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>
Christopher, dziękuję za wspaniałą odpowiedź! Będę też musiał przejrzeć listę użytkowników (prawdopodobnie czas, abym się tam zapisał, tylko że mam do czynienia z wieloma różnymi technologiami, aby subskrybować wszystkie listy użytkowników ...). Wygląda na to, że nie będę w stanie uniknąć zmiany/rozszerzenia kodu Tomcat, chyba że oficjalny kod będzie obsługiwał arbitralnie zagnieżdżone poziomy w najbliższej przyszłości. Jeśli muszę zacząć zmieniać kod Tomcat, prawdopodobnie przedłużyłbym LockoutRealm z opcją wykluczenia użytkownika - czy wiedziałbyś, że coś podobnego istnieje? Dzięki! – FelixD
Zalogowałem [raport o błędzie] (https://issues.apache.org/bugzilla/show_bug.cgi?id=54141). –
Świetnie, dzięki Christopher! Przepraszam, że nie robię tego samemu, trochę stresującego w tej chwili ... – FelixD