Introduktion til Java Config for Spring Security

1. Oversigt

Denne artikel er en introduktion til Java-konfiguration til Spring Security hvilket gør det muligt for brugere nemt at konfigurere Spring Security uden brug af XML.

Java-konfiguration blev tilføjet til Spring-rammen i Spring 3.1 og udvidet til Spring Security i Spring 3.2 og er defineret i en klasse, der er kommenteret @Konfiguration.

2. Maven-opsætning

For at bruge Spring Security i et Maven-projekt skal vi først have fjeder-sikkerhed-kerne afhængighed i projektet pom.xml:

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

Den nyeste version kan altid findes her.

3. Websikkerhed med Java-konfiguration

Lad os starte med et grundlæggende eksempel på en Spring Security Java-konfiguration:

@EnableWebSecurity public class SecurityConfig udvider WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Undtagelse {auth.inMemoryAuthentication (). WithUser ("bruger") .password (passwordEncoder ()) "("). " BRUGER"); }}

Som du måske har bemærket, konfigurerer konfigurationen en grundlæggende konfiguration til hukommelse i hukommelsen. Derudover skal vi starte en forår 5 PasswordEncoder bønne:

@Bean public PasswordEncoder passwordEncoder () {returner ny BCryptPasswordEncoder (); }

4. HTTP-sikkerhed

For at aktivere HTTP-sikkerhed i foråret er vi nødt til at udvide WebSecurityConfigurerAdapter for at angive en standardkonfiguration i konfigurer (HttpSecurity http) metode:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.authorizeRequests () .anyRequest (). godkendt (). og (). httpBasic (); } 

Ovenstående standardkonfiguration sørger for, at enhver anmodning til applikationen godkendes med formbaseret login eller grundlæggende HTTP-godkendelse.

Det svarer også nøjagtigt til følgende XML-konfiguration:

5. Formular login

Interessant nok genererer Spring Security automatisk en login-side baseret på de funktioner, der er aktiveret og bruger standardværdier til URL'en, der behandler det indsendte login:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.authorizeRequests () .anyRequest (). godkendt (). og (). formLogin () .loginPage ("/ login"). permitAll (); }

Her er den automatisk genererede login-side praktisk at komme i gang hurtigt.

6. Godkendelse med roller

Lad os nu konfigurere nogle enkle autorisationer på hver URL ved hjælp af roller:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.authorizeRequests () .antMatchers ("/", "/home").access("hasRole('USER ')") .antMatchers ("/ admin / **") .hasRole ("ADMIN") .og () // nogle flere metodeopkald .formLogin (); }

Læg mærke til, hvordan vi bruger både den typesikre API - hasRole - men også den ekspressionsbaserede API via adgang.

7. Log af

Som mange andre aspekter af Spring Security har logout nogle store standarder leveret af rammen.

Som standard annullerer en logoutanmodning sessionen, rydder alle autentificeringscacher, rydder SecurityContextHolder og omdirigerer til login-siden.

Her er en simpel logout-konfiguration:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.logout (); }

Men hvis du ønsker at få mere kontrol over de tilgængelige håndterere, så ser en mere komplet implementering ud:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.logout (). logoutUrl ("/ min / logout") .logoutSuccessUrl ("/ min / index") .logoutSuccessHandler (logoutSuccessHandler) .invalidateHttpSession (true) .addLogoutHandler .deleteCookies (cookieNamesToClear) .og () // nogle andre metodeopkald}

8. Godkendelse

Lad os se på en anden måde at tillade godkendelse på med Spring Security.

8.1. Autentificering i hukommelsen

Vi starter med en enkel konfiguration i hukommelsen:

@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Undtagelse {auth.inMemoryAuthentication () .withUser ("bruger"). Adgangskode (passwordEncoder (). Kode ("password")). Roller ("USER"). Og (). withUser ("admin"). adgangskode (passwordEncoder (). kodning ("password")). roller ("BRUGER", "ADMIN"); } 

8.2. JDBC-godkendelse

For at flytte det til JDBC er alt, hvad du skal gøre, at definere en datakilde i applikationen - og bruge den direkte:

@Autowired privat DataSource dataSource; @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster undtagelse {auth.jdbcAuthentication (). DataSource (dataSource) .withDefaultSchema () .withUser ("bruger"). Adgangskode (passwordEncoder (). Kod ("password")). Roller (roller). "USER") .og () .withUser ("admin"). Adgangskode (passwordEncoder (). Kodning ("password")). Roller ("USER", "ADMIN"); } 

Med begge ovenstående eksempler er vi selvfølgelig også nødt til at definere PasswordEncoder bønne som beskrevet i afsnit 3.

9. Konklusion

I denne hurtige vejledning gik vi over det grundlæggende i Java Configuration for Spring Security og fokuserede på kodeeksemplerne, der illustrerer de enkleste konfigurationsscenarier.