Spring Security Erinnere dich an mich

Spring Security Angemeldet bleiben

1. Überblick

Dieses Tutorial zeigthow to enable and configure Remember Me functionality in a web application mit Spring Security. Das Einrichten vonthe MVC application with security and a simple form login wurde bereits diskutiert.

Der Mechanismus kannidentify the user across multiple sessions erreichen - das erste, was zu verstehen ist, ist, dass Remember Me nur inafter the session times out tritt. Standardmäßig geschieht dies nach 30 Minuten Inaktivität, jedochtimeout can be configured inweb.xml.

[.iframe-fluid] ##

2. Die Sicherheitskonfiguration

Sehen wir uns an, wie Sie die Sicherheitskonfiguration mit Java einrichten:

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean("authenticationManager")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
            return super.authenticationManagerBean();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user1").password("{noop}user1Pass").roles("USER")
            .and()
            .withUser("admin1").password("{noop}admin1Pass").roles("ADMIN");
    }

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/anonymous*").anonymous()
            .antMatchers("/login*").permitAll()
            .anyRequest().authenticated()

            .and()
            .formLogin()
            .loginPage("/login.html")
            .loginProcessingUrl("/login")
            .failureUrl("/login.html?error=true")

            .and()
            .logout().deleteCookies("JSESSIONID")

            .and()
            .rememberMe().key("uniqueAndSecret")
            ;
    }
}

Wie Sie sehen können, istthe basic configuration using the rememberMe() method extrem einfach und bleibt durch zusätzliche Optionen sehr flexibel. Daskey ist hier wichtig - es ist ein privates Wertgeheimnis für die gesamte Anwendung und wird beim Generieren des Inhalts des Tokens verwendet.

Zusätzlich werden dietime the token is valid can be configured von der Standardeinstellung von 2 Wochen bis beispielsweise einem Tag mittokenValiditySeconds() verwendet:

rememberMe().key("uniqueAndSecret").tokenValiditySeconds(86400)

Wir können uns auch die entsprechende XML-Konfiguration ansehen:


    
    
    

    
    

    



    
        
            
            
        
    

3. Das Anmeldeformular

Das Anmeldeformular ähneltthe one we used for form login:





    

Login

User:
Password:
Remember Me:

Beachten Sie die neu hinzugefügte Eingabe voncheckbox - Zuordnung zuremember-me. Diese hinzugefügte Eingabe reicht aus, um sich anzumelden und mich aktiv zu merken.

Dieser Standardpfad kann auch wie folgt geändert werden:

.rememberMe().rememberMeParameter("remember-me-new")

Der Mechanismus erstellt bei der Anmeldung des Benutzers ein zusätzliches Cookie - das "Erinnere dich an mich" -Cookie.

DasRemember Me cookie enthält die folgenden Daten:

  • username - um den angemeldeten Principal zu identifizieren

  • expirationTime - um den Cookie abzulaufen; Standard ist 2 Wochen

  • MD5 hash - der vorherigen 2 Werte -username undexpirationTime pluspassword und vordefiniertekey

Als erstes ist hier zu beachten, dass sowohlusername als auchpassword Teil des Cookies sind. Dies bedeutet, dass das Cookie bei einer Änderung nicht mehr gültig ist. Außerdem können dieusername aus dem Cookie gelesen werden.

Darüber hinaus ist es wichtig zu verstehen, dass dieser Mechanismus potenziell anfällig ist, wenn das Remember Me-Cookie erfasst wird. The cookie will be valid and usable, bis es abläuft oder die Anmeldeinformationen geändert werden.

5. In der Praxis

Um zu sehen, wie der Erinnerungsmechanismus funktioniert, können Sie:

  • Einloggen mit Erinnere dich an mich aktiv

  • Warten Sie, bis die Sitzung abgelaufen ist (oder entfernen Sie das CookieJSESSIONIDim Browser).

  • Lade die Seite neu

Ohne mich aktiv zu erinnern, sollte der Benutzer nach Ablauf des Cookiesredirected back to the login page sein. Mit erinnern Sie sich an mich, der Benutzer jetztstays logged in mit Hilfe des neuen Tokens / Cookies.

6. Fazit

In diesem Lernprogramm wurde gezeigt, wie Sie die Funktion "Angemeldet bleiben" in der Sicherheitskonfiguration einrichten und konfigurieren. Außerdem wurde kurz beschrieben, welche Art von Daten in das Cookie aufgenommen werden.

Die Implementierung befindet sich inthe example github project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.

Wenn das Projekt lokal ausgeführt wird, kann auflogin.html unterlocalhost zugegriffen werden.