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.