Sto cercando di Realms nido come segue Tomcat 7.0.32 (scritto qui in pseudo-XML):Tomcat 7 nidificazione CombinedRealm, LockoutRealm e DataSourceRealm
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
Questo non sembra funzionare - è è possibile annidare Realms in Tomcat di più di due livelli? Ho ricevuto un avviso nei registri:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
L'idea alla base è che il servizio web ha alcuni utenti critici che non deve essere bloccato (ad esempio, come DOS) e alcuni utenti normali, che possono avere le password deboli, dove il lockoutRealm dovrebbe essere attivo. Sono sicuro che altre persone sono state in questa situazione.
Se esiste un altro modo per ottenere questo risultato (ad esempio una lista bianca per il LockoutRealm), faccelo sapere.
È necessario anche l'accesso singolo.
Immagino che estendere il codice LockoutRealm esistente con un elenco di account da non bloccare mai sarebbe un'opzione, ma non sono così entusiasta di scrivere il mio Realm, preferirei non aggiungere codice personalizzato a quel livello a Tomcat , in quanto ciò complicherà la configurazione per gli altri e con ogni aggiornamento Tomcat potrebbe rompersi ecc.
Grazie per qualsiasi aiuto!
Ecco la parte rilevante del server.xml della mia configurazione di prova:
<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, grazie mille per l'eccellente risposta! Inoltre darò un'occhiata alla lista degli utenti (è probabilmente il momento per me di iscrivermi lì, solo che ho a che fare con troppe tecnologie diverse per tutto il tempo per iscrivermi a tutte le liste degli utenti ...). Sembra che non sarò in grado di evitare di modificare/estendere il codice di Tomcat, a meno che il codice ufficiale non supporti livelli arbitrariamente innestati nel prossimo futuro. Se ho bisogno di iniziare a cambiare il codice di Tomcat, probabilmente preferirei estendere il LockoutRealm con un'opzione di esclusione del nome utente - o sapresti se esiste qualcosa di simile? Grazie! – FelixD
Ho registrato un [bug report per questo] (https://issues.apache.org/bugzilla/show_bug.cgi?id=54141). –
Fantastico, grazie Christopher! Scusa se non lo faccio da solo, un po 'stressante qui al momento ... – FelixD