2016-04-20 19 views
0

habe ich versucht, mehrere Sicherheits Bereiche in meiner Anwendung zu haben, aber ich Ausnahme während des Einsatzes:Mehrere Sicherheits Realms

Nachricht: Multiple Login-config Elemente

web.xml Fragment entdeckt:

.... 
<security-constraint> 
    <display-name>Admin Constraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>Admin Pages</web-resource-name> 
     <description/> 
     <url-pattern>/admin/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <description/> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>ApplicationRealm</realm-name> 
</login-config> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>mb-domain</realm-name> 
</login-config> 
<security-role> 
    <description/> 
    <role-name>admin</role-name> 
</security-role> 
<security-role> 
    <description/> 
    <role-name>user</role-name> 
</security-role> 
... 

Was mache ich falsch?

+2

Abgesehen davon, dass dies eine Verletzung der Spezifikation ist, ist Ihr Anwendungsfall nicht klar. Warum würden Sie jemals mehrere Login-Konfigurationen benötigen? Wie würde der Container wissen, welche Login-Konfiguration er für die eingeschränkten URLs in der App verwenden soll? – CoolBeans

+2

@CoolBeans "Warum würden Sie jemals mehrere Login-Konfigurationen benötigen?" - Viele Anwendungsfälle -> Erlauben Sie dem Benutzer, sich zu entscheiden, wie er sich anmeldet (loggen Sie sich einfach von dieser Website aus und sehen Sie sich die Login-Optionen an) oder verschiedene Authentifizierungsmechanismen für verschiedene Segmente der App. Und es gibt sogar den Anwendungsfall, einen automatischen Fallback zu haben (try token zuerst, wenn es den fallback zu Benutzername/Passwort transparent macht) –

+1

@guest "Ich habe versucht, mehrere Sicherheitsbereiche zu haben" - Was Sie gezeigt haben sind * Authentifizierungsmechanismen * keine Realms . Realm als Begriff ist in Java EE etwas unbestimmt, er kann auch "Identitätsspeicher" bedeuten. –

Antwort

4

Pro Webmodul-Implementierungsdeskriptor kann nur eine <login-config> verwendet werden.

Nach §14.2 der Servlet Specification v. 3.1:

Regeln für die Bereitstellung Deskriptorverarbeitungseinrichtung

[...]

  • Die Unterelemente unter web-app können in beliebiger Reihenfolge sein in dieser Version der Spezifikation. Aufgrund der Einschränkung des XML-Schemas wurde die Vielzahl der Elemente distributable, , welcome-file-list, jsp-config, login-config und locale-encoding-mapping-list von "optional" auf "0 oder mehr" geändert. Die Container müssen den Entwickler mit einer beschreibenden Fehlermeldung informieren, wenn der Implementierungsdeskriptor mehr als ein Element von session-config, jsp-config und login-config enthält.

Alternativen:

  • Verwenden programmatische Authentifizierung (basierend auf entweder JASPIC oder was auch immer Einrichtungen für Java EE/Servlet-Implementierung bietet).
  • Verwenden Sie die EAR-Verpackung (wenn eine einzelne Authentifizierungsstrategie pro Modul zulässig ist).
  • Von einem Container gesteuerte Authentifizierung.