2017-11-29 21 views
2

Wir sind mit Federsicherheits Version 4.2.3,Make Frühjahr `login` Filter verfügbar über GET

ich konfigurieren möchten, dass die login Filter über GET zur Verfügung. (Standardmäßig Aufruf http://127.0.0.1/login mit GET http Methode gibt 404.)

Um dies zu tun, erweitere ich die UsernamePasswordAuthenticationFilter meine eigenen Filter zu konfigurieren und konfigurieren, wie unten

<beans:bean id="myUsernamePasswordAuthenticationFilter" 
      class="foo.bar.MyUsernamePasswordAuthenticationFilter"> 
      <beans:property name="authenticationManager" ref="authenticationManager"/> 
      <beans:property name="postOnly" value="false"/> 
</beans:bean> 

und auch

<http entry-point-ref="authenticationEntryPoint"> 
     <custom-filter before="FORM_LOGIN_FILTER" ref="myUsernamePasswordAuthenticationFilter"/> 
    ...... 

Es funktioniert nicht!

Während debug finde ich, dass es eine hart codierte Linie an UsernamePasswordAuthenticationFilter Konstruktor, wie unten:

public UsernamePasswordAuthenticationFilter() { 
     super(new AntPathRequestMatcher("/login", "POST")); 
    } 

ich denken , diese Ursache, dass die AntPathRequestMatcher.matches immer false

Nun zurückkehren kann ich Konfigurieren Sie den Filter login, um über GET verfügbar zu sein. Also wird http://127.0.0.1/login/username=foo&bar=bar angerufen werden? Wie ?

+0

@dur es hat funktioniert! Der Aufruf von 'setRequiresAuthenticationRequestMatcher (neuer AntPathRequestMatcher ("/login "," GET "));' im 'myUsernamePasswordAuthenticationFilter'-Konstruktor löste das Problem. Bitte sende es als Antwort, damit ich es annehmen kann! –

Antwort

1

Sie haben postOnly zu verwenden:

Legt fest, ob nur Anfragen HTTP POST wird durch diesen Filter zugelassen werden. Wenn der Wert auf "true" gesetzt ist und eine Authentifizierungsanforderung empfangen wird, bei der es sich nicht um eine POST-Anforderung handelt, wird sofort eine Ausnahme ausgelöst und die Authentifizierung wird nicht versucht. Die Methode unsuccessfulAuthentication() wird aufgerufen, als würde sie eine fehlgeschlagene Authentifizierung verarbeiten.

und setRequiresAuthenticationRequestMatcher finden AbstractAuthenticationProcessingFilter:

Dieser Filter wird eine Anforderung abfangen und versucht, die Authentifizierung von dieser Anforderung zu erfüllen, wenn die Anforderung der setRequiresAuthenticationRequestMatcher(RequestMatcher) übereinstimmt.

mit einer RequestMatcher, die HTTP GET entspricht. Zum Beispiel:

new AntPathRequestMatcher("/login", "GET") 

siehe AntPathRequestMatcher:

Erzeugt einen Matcher mit dem gelieferten Muster und HTTP-Methode in einem Fall insensitive Weise.