Benutzerdefinierte Feder-3.0-Sicherheit-Filter, Mehrere EntryPoints, AuthenticationProvider

Ich brauche meine Sicherheit, um eine der folgenden Logik :

  1. Überprüfen das Vorhandensein von einen header-parameter
  2. Abhängig von der Anwesenheit der paremeter entweder ein redirect auf eine login-Seite (wenn nicht authentifiziert) oder beim check-basic-authentication token

In beiden Fällen habe ich den gleichen Authentifizierungs-provider , aber ich kann es nicht haben, zu arbeiten.
Die delegierende entrypoint funktioniert gut, aber ich habe nie wieder in meine eigenen authenticationprovider ...

Hier ist meine Sicherheit config :

    <security:global-method-security
    secured-annotations="enabled" />

<security:http entry-point-ref="delegatingAuthenticationEntryPoint"
    use-expressions="true" auto-config="false">
    <!-- <security:custom-filter position="FORM_LOGIN_FILTER" -->
    <!-- ref="usernamePasswordAuthenticationFilter" /> -->
    <!-- <security:custom-filter position="BASIC_AUTH_FILTER" -->
    <!-- ref="basicAuthenticationFilter" /> -->
    <security:intercept-url pattern="/login*"
        filters="none" />
    <security:intercept-url pattern="/portimaLogin*"
        filters="none" />
    <security:intercept-url pattern="/**"
        access="isAuthenticated()" />
</security:http>

<bean id="delegatingAuthenticationEntryPoint"
    class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
    <constructor-arg>
        <map>
            <entry key="hasHeader('portima','true')" value-ref="PortimaLoginUrlAuthenticationEntryPoint" />
        </map>
    </constructor-arg>
    <property name="defaultEntryPoint" ref="authenticationEntryPoint" />
</bean>

<bean id="usernamePasswordAuthenticationFilter"
    class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
</bean>

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

<bean id="PortimaLoginUrlAuthenticationEntryPoint"
    class="be.ap.common.security.spring.PortimaLoginUrlAuthenticationEntryPoint">
    <property name="loginFormUrl" value="${portima.login.page}" />
</bean>

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

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

<bean id="authenticationProvider" class="be.ap.common.security.spring.APAuthenticationProvider" />

<bean id="userDetailsService" class="be.ap.common.security.spring.APUserDetailsService" />

Irgendeine Idee ?

Gibt es in Ihrem benutzerdefinierten AuthenticationProvider Umsetzung der supports() Methode richtig? Wenn Sie false zurückgibt, für die UsernamePasswordAuthenticationToken Klasse, dann wird es nie werden gebeten Prozess der Authentifizierungs-Token erstellt, indem Ihr Filter.
Es doesn ' T sogar gehen in der support-Methode...
public boolean unterstützt(Klasse<? extends Object> Authentifizierung) { return UsernamePasswordAuthenticationToken.Klasse.isAssignableFrom(Authentifizierung); }
Es scheint dann, dass Sie Ihre deklarierten Filter werden eigentlich ignoriert. Finden Sie im Handbuch (static.springsource.org/spring-security/site/docs/3.1.x/...), um zu sehen, wie Filter erstellt, indem die Namensraum config ersetzt werden kann.

InformationsquelleAutor Olivier Mahieu | 2013-02-12

Schreibe einen Kommentar