2014-01-13 9 views
16

Unsere App verfügt über einen benutzerdefinierten Erfolgshandler für erfolgreiche Anmeldungen. Es leitet sie im Grunde an die Seite weiter, auf der sie sich befanden, als ihre Sitzung abgelaufen war.Verschieben der Spring-Sicherheit Nach Java Config, wo wird Authentifizierung-success-handler-ref hingelegt?

Wir verschieben auf eine Java-Konfiguration und nicht auf eine Spring-XML-Konfiguration. Der Rest der Konfiguration verlief reibungslos, aber wir können nicht herausfinden, wo das Attribut authentication-success-handler-ref des security: form-login-Tags abgelegt werden muss.

<security:http auto-config='true'> 
    ... 
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/> 
    <security:form-login login-page="/login" default-target-url="/sites" 
        authentication-failure-url="/login" 
        authentication-success-handler-ref="authenticationSuccessHandler"/> 
... 

Hier ist unsere Config, so weit.

Auch können wir nicht finden, wo Default-Target-URL, aber das ist definitiv weniger wichtig.

Vorbehalt, wir verwenden eigentlich Groovy, aber der Code ist im Grunde das gleiche wie eine Java-Konfiguration.

Antwort

24

Alle Einstellungen können innerhalb des globalen configure Verfahren durchgeführt werden. Fügen Sie die folgenden:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .anyRequest().authenticated() 
      .and() 
     .formLogin() 
      .loginPage("/login") 
      .defaultSuccessUrl("/sites") 
      .failureUrl("/login") 
      .successHandler(yourSuccessHandlerBean) // autowired or defined below 
      .and() 
     .logout() 
      .permitAll() 
      .and() 
    } 
+0

Danke, genau das, was ich brauchte! – geekonablog

+0

Ich wollte nur hinzufügen, dass Sie einen alternativen Konstruktor angeben können, der eine boolesche Angabe vornimmt, wenn Sie nach einer erfolgreichen Anmeldung immer auf die angegebene URL umleiten möchten - zum Beispiel defaultSuccessUrl ("/ sites", true). Beachten Sie, dass Spring nicht zu der URL weitergeleitet wird, auf die Sie zugreifen wollten, bevor Sie zur Authentifizierungsseite weitergeleitet werden. mancini0

+0

Was ist mit der Erinnerung an mich? Wie geht man damit um? – s1moner3d

3

Sie müssen Bean erweitern SimpleUrlAuthenticationSuccessHandler oder SavedRequestAwareAuthenticationSuccessHandler erstellen. Zum Beispiel:

@Bean 
public SavedRequestAwareAuthenticationSuccessHandler successHandler() { 
    SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); 
    successHandler.setTargetUrlParameter("/secure/"); 
    return successHandler; 
} 

Dann haben Sie die Einrichtung auf Bohne erstreckt AbstractAuthenticationProcessingFilter:

UsernamePasswordAuthenticationFilter authenticationFilter = new UsernamePasswordAuthenticationFilter(); 
authenticationFilter.setAuthenticationSuccessHandler(successHandler()); 
+0

Das Problem ist, erfordert die AbstractAuthenticationProcessingFilter die attemptAuthentication Verfahren implementiert, die wir vielleicht nicht wollen, zu tun, wenn wir bereits einen benutzerdefinierten Authentifizierungsanbieter haben. – Stephane

+1

FYI, Der 'successHandler.setTargetUrlParameter' wird verwendet, damit SpringSecurity auf einen Abfrageparameter antwortet, wenn die Authentifizierung erfolgreich ist. Also, Sie könnten etwas wie haben: 'successHandler.setTargetUrlParameter (" next ");' und dann, wenn die URL war: "http: // localhost: 8080/Login? Next =/foo", bei erfolgreicher Authentifizierung, der Erfolg Der Handler würde zu '/ foo' umleiten. HINWEIS: Die Dinge könnten sich seit 2014 geändert haben, aber da ich dies in einer Google-Suche gefunden habe, dachte ich, ich würde diese Informationen bereitstellen. – afitnerd

Verwandte Themen