2009-08-19 10 views

Antwort

6

Das Endergebnis Sie ist möglich, wollen, ich habe in die exakt gleiche Problem lief und hier ist meine Lösung.

Jedes Mal, wenn Formular-Login im Namespace definiert wird, überschreibt es automatisch alle anderen Authentifizierungsfilter, die Sie über den Namespace anwenden. Dies geschieht durch die Anordnung der Filterkette Look FilterChainOrder.java in der Feder Sicherheit, um zu sehen, wie die Reihenfolge tatsächlich auf jeden Filter angewendet wird.

Um dies zu umgehen, entfernen Sie das http-basic-Tag aus dem Namespace, dann definieren Sie manuell die Bean für die Basisauthentifizierung und legen ihre Reihenfolge vor dem AuthenticationProcessingFilter, da dies der Spring-Sicherheitsfilter ist, der die Formularanmeldung verarbeitet. Die BasicProcessingFilter-Spring-Funktion stellt einen passiven Filter bereit. Wenn also die Anmeldeinformationen fehlen, wird die Filterkette so lange durchlaufen, bis der entsprechende Filter zur Verarbeitung der Anforderung gefunden wird.

Jetzt können wir die BasicProcessingFilter-Bean manuell definieren, indem wir die Reihenfolge festlegen, in der sie in der Filterkette angezeigt wird. Im Folgenden ist ein Beispiel für die zusätzlichen XML-Deklarationen müssen Sie in der Sicherheit xml (Spring Security < 3.x)

<bean id="basicProcessingFilter" class="org.springframework.security.ui.basicauth.BasicProcessingFilter"> 
    <property name="authenticationManager"><ref bean="authenticationManager"/></property> 
    <security:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/> 
    <property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property> 
</bean> 

<bean id="authenticationEntryPoint" 
    class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint"> 
       <property name="realmName" value="My Realm Here"/> 
</bean> 

Beachten Sie auch, wenn Sie Ihre AuthenticationManager Referenz gefunden liefern ist nicht, dass Sie einen Alias ​​hinzufügen können, um Dein Namespace wie der folgende.

<security:authentication-manager alias="authenticationManager"/> 

Das Endergebnis ist das Basisfilter wird als passive Filter und wenn seine erforderlichen Anmeldeinformationen werden die Filterkette und die Formular-Login-Filter wird es dann handhaben weiter unten fehlen angewandt werden.

Das Problem bei diesem Ansatz besteht darin, dass bei korrekter Eingabe von Anmeldeinformationen die Antwort zurück die Anmeldeseite aus dem Formular-Login-Filter ist.

Es scheint jedoch, dass dieses Problem durch Feder in Version 3.1 der Federsicherheit behoben wird und diese Arbeit nicht mehr benötigt wird.

10

Die response by @grimesjm ist richtig. Wenn Sie jedoch Frühling 3.x verwenden müssen Sie die Klassennamen anpassen:

<bean id="basicProcessingFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter"> 
    <property name="authenticationManager"> 
     <ref bean="authenticationManager" /> 
    </property> 
    <property name="authenticationEntryPoint"> 
     <ref bean="authenticationEntryPoint" /> 
    </property> 
</bean> 

<bean id="authenticationEntryPoint" 
    class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint"> 
    <property name="realmName" value="Your realm here" /> 
</bean> 

Und

<sec:http auto-config="true"> 
    ... your intercept-url here 

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" /> 

    <sec:form-login ... /> 
    .... 
</sec:http> 

Ich weiß nicht, ob vor SECURITY_CONTEXT_FILTER den Filter platzieren ist die beste Option oder nicht .

1

Es ist jetzt mit Spring Security 3.1 möglich.0

+1

Das ist richtig, hier ist ein Link, der auf diese Antwort erweitern wird: http://stackoverflow.com/questions/3671861/two-realms-in-same-application-with-spring-security –

+0

Ich denke, das Ziel ist es Lassen Sie die REST-API beide Authentifizierungen innerhalb desselben Bereichs unterstützen. Zwei Reiche zu definieren ist wie zwei Kriege zu definieren - es funktioniert, aber es ist nicht ideal. – Eugen

Verwandte Themen