ich zu nisten Realms versucht wie in Tomcat 7.0.32 folgt (geschrieben hier in pseudo-XML):Tomcat 7 Verschachtelung CombinedRealm, LockoutRealm und DataSourceRealm
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
Dies gilt nicht zu funktionieren scheint - ist es möglich, Realms in Tomcat um mehr als zwei Ebenen zu verschachteln? Ich erhalte eine Warnung in den Protokollen:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
Die Idee dahinter ist, dass der Web-Service einige kritische Benutzern, die nicht gesperrt (zB als DOS) werden müssen, und einige normale Benutzer, die schwächer Passwörter haben, wo der LockoutRealm aktiv sein sollte. Ich bin sicher, dass andere Leute in dieser Situation waren.
Wenn es eine andere Möglichkeit gibt, dies zu erreichen (z. B. eine Whitelist für den LockoutRealm), lassen Sie es mich bitte wissen.
Einmaliges Anmelden wird ebenfalls benötigt.
Ich denke, das Erweitern des vorhandenen LockoutRealm-Codes mit einer Liste von Konten, die nie gesperrt werden, wäre eine Option, aber ich bin nicht so scharf darauf, meinen eigenen Realm zu schreiben. Ich würde Tomcat lieber keinen benutzerdefinierten Code auf dieser Ebene hinzufügen , da dies das Setup für andere verkompliziert und mit jedem Tomcat-Update könnte es brechen usw.
Vielen Dank für jede Hilfe!
Hier ist der relevante Teil der server.xml meines Test 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, vielen Dank für die ausgezeichnete Antwort! Außerdem werde ich mir die Benutzerliste ansehen (es ist wahrscheinlich an der Zeit, dass ich mich dort anmelde, nur dass ich immer zu viele verschiedene Technologien verwende, um alle Benutzerlisten zu abonnieren ...). Klingt so, als würde ich nicht in der Lage sein, den Tomcat-Code zu ändern/zu erweitern, es sei denn, der offizielle Code würde in naher Zukunft beliebig verschachtelte Levels unterstützen. Wenn ich anfangen muss, den Tomcat-Code zu ändern, würde ich den LockoutRealm wahrscheinlich eher um eine Username-Ausschlussoption erweitern - oder würden Sie wissen, ob etwas Ähnliches existiert? Vielen Dank! – FelixD
Ich habe einen [Fehlerbericht dafür] (https://issues.apache.org/bugzilla/show_bug.cgi?id=54141) protokolliert. –
Großartig, danke Christopher! Tut mir leid, dass ich das nicht selbst gemacht habe, ein bisschen stressig hier im Moment ... – FelixD