Einführung in Java Config für Spring Security

Einführung in Java Config für Spring Security

1. Überblick

Dieser Artikel istan introduction to Java configuration for Spring Security, mit dem Benutzer Spring Security ohne Verwendung von XML. einfach konfigurieren können

Die Java-Konfiguration wurde dem Spring-Framework inSpring 3.1 hinzugefügt und inSpring 3.2 auf Spring Security erweitert und ist in einer mit@Configuration bezeichneten Klasse definiert.

2. Maven Setup

Um Spring Security in einem Maven-Projekt verwenden zu können, muss zuerst die Abhängigkeit vonspring-security-coreim Projektpom.xml vorhanden sein:


    org.springframework.security
    spring-security-core
    4.1.3.RELEASE

Die neueste Version ist immerhere zu finden.

3. Web Security mit Java-Konfiguration

Beginnen wir mit einem grundlegenden Beispiel für eine Spring Security Java-Konfiguration:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
      throws Exception {
        auth.inMemoryAuthentication().withUser("user")
          .password("password").roles("USER");
    }
}

Wie Sie vielleicht bemerkt haben, richtet die Konfiguration eine grundlegende speicherinterne Authentifizierungskonfiguration ein.

4. HTTP-Sicherheit

Um die HTTP-Sicherheit im Frühjahr zu aktivieren, müssen wirWebSecurityConfigurerAdapter erweitern, um eine Standardkonfiguration in der Methodeconfigure(HttpSecurity http) bereitzustellen:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().httpBasic();
}

Die obige Standardkonfiguration stellt sicher, dass alle Anforderungen an die Anwendung mit formularbasierter Anmeldung oder HTTP-Basisauthentifizierung authentifiziert werden.

Außerdem ähnelt es genau der folgenden XML-Konfiguration:


    
    
    

5. Formular Login

Interessanterweise generiert Spring Security automatisch eine Anmeldeseite, basierend auf den aktivierten Funktionen und unter Verwendung von Standardwerten für die URL, die das übermittelte Login verarbeitet:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().formLogin()
      .loginPage("/login").permitAll();
}

Hier ist die automatisch generierte Anmeldeseite praktisch, um schnell loszulegen.

6. Autorisierung mit Rollen

Lassen Sie uns nun eine einfache Autorisierung für jede URL mithilfe von Rollen konfigurieren:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .antMatchers("/", "/home").access("hasRole('USER')")
      .antMatchers("/admin/**").hasRole("ADMIN")
      .and()
      // some more method calls
      .formLogin();
}

Beachten Sie, wie wir sowohl die typsichere API -hasRole - als auch die ausdrucksbasierte API überaccess. verwenden

7. Ausloggen

Wie viele andere Aspekte von Spring Security bietet das Framework auch beim Abmelden einige hervorragende Standardeinstellungen.

Standardmäßig macht eine Abmeldeanforderung die Sitzung ungültig, löscht alle Authentifizierungscaches, löscht dieSecurityContextHolder und leitet zur Anmeldeseite weiter.

Hier ist eine einfache Abmeldekonfiguration:

protected void configure(HttpSecurity http) throws Exception {
    http.logout();
}

Wenn Sie jedoch mehr Kontrolle über die verfügbaren Handler erhalten möchten, sieht eine vollständigere Implementierung folgendermaßen aus:

protected void configure(HttpSecurity http) throws Exception {
    http.logout().logoutUrl("/my/logout")
      .logoutSuccessUrl("/my/index")
      .logoutSuccessHandler(logoutSuccessHandler)
      .invalidateHttpSession(true)
      .addLogoutHandler(logoutHandler)
      .deleteCookies(cookieNamesToClear)
      .and()
      // some other method calls
}

8. Authentifizierung

Schauen wir uns eine andere Möglichkeit an, die Authentifizierung mit Spring Security zu ermöglichen.

8.1. In-Memory-Authentifizierung

Wir beginnen mit einer einfachen In-Memory-Konfiguration:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
  throws Exception {
    auth.inMemoryAuthentication()
      .withUser("user").password("password").roles("USER")
      .and()
      .withUser("admin").password("password").roles("USER", "ADMIN");
}

8.2. JDBC-Authentifizierung

Um dies in JDBC zu verschieben, müssen Sie lediglich eine Datenquelle in der Anwendung definieren - und diese direkt verwenden:

@Autowired
private DataSource dataSource;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
  throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource)
      .withDefaultSchema()
      .withUser("user").password("password").roles("USER")
      .and()
      .withUser("admin").password("password").roles("USER", "ADMIN");
}

9. Fazit

In diesem kurzen Tutorial haben wir uns mit den Grundlagen der Java-Konfiguration für Spring Security befasst und uns auf die Codebeispiele konzentriert, die die einfachsten Konfigurationsszenarien veranschaulichen.