Introduksjon til Java Config for Spring Security

1. Oversikt

Denne artikkelen er en introduksjon til Java-konfigurasjon for Spring Security som gjør det mulig for brukere å enkelt konfigurere Spring Security uten bruk av XML.

Java-konfigurasjon ble lagt til Spring-rammeverket våren 3.1 og utvidet til Spring Security våren 3.2 og er definert i en klasse som er kommentert @Konfigurasjon.

2. Maven-oppsett

For å bruke Spring Security i et Maven-prosjekt, må vi først ha vår-sikkerhetskjerne avhengighet i prosjektet pom.xml:

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

Den siste versjonen finner du alltid her.

3. Websikkerhet med Java-konfigurasjon

La oss starte med et grunnleggende eksempel på en Spring Security Java-konfigurasjon:

@EnableWebSecurity offentlig klasse SecurityConfig utvider WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Unntak {auth.inMemoryAuthentication (). WithUser ("bruker") .password (passwordEncoder () ")." BRUKER"); }}

Som du kanskje har lagt merke til, konfigurerer konfigurasjonen en grunnleggende autentiseringskonfigurasjon i minnet. I tillegg, fra og med våren 5, trenger vi en PasswordEncoder bønne:

@Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }

4. HTTP-sikkerhet

For å aktivere HTTP-sikkerhet på våren, må vi utvide WebSecurityConfigurerAdapter for å gi en standardkonfigurasjon i konfigurer (HttpSecurity http) metode:

beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster Unntak {http.authorizeRequests () .anyRequest (). autentisert (). og (). httpBasic (); } 

Ovennevnte standardkonfigurasjon sørger for at enhver forespørsel til applikasjonen er autentisert med skjemabasert pålogging eller grunnleggende HTTP-autentisering.

Dessuten ligner den nøyaktig følgende XML-konfigurasjon:

5. Skjemainnlogging

Interessant, genererer Spring Security en påloggingsside automatisk, basert på funksjonene som er aktivert og bruker standardverdier for URL-en som behandler den innsendte påloggingen:

beskyttet tomrom konfigurere (HttpSecurity http) kaster Unntak {http.authorizeRequests () .anyRequest (). autentisert () .and (). formLogin () .loginPage ("/ login"). permitAll (); }

Her er den automatisk genererte påloggingssiden praktisk å komme i gang raskt.

6. Autorisasjon med roller

La oss nå konfigurere noen enkle autorisasjoner på hver URL ved hjelp av roller:

beskyttet tomromskonfigurasjon (HttpSecurity http) kaster unntak {http.authorizeRequests () .antMatchers ("/", "/home").access("hasRole('USER ')") .antMatchers ("/ admin / **") .hasRole ("ADMIN"). og () // noen flere metodekaller .formLogin (); }

Legg merke til hvordan vi bruker både den typesikre APIen - hasRole - men også uttrykksbasert API, via adgang.

7. Logg ut

Som mange andre aspekter av Spring Security, har utlogging noen store standarder gitt av rammeverket.

Som standard ugyldiggjør en avloggingsforespørsel økten, tømmer autentiseringsbuffer, tømmer SecurityContextHolder og viderekobler til påloggingssiden.

Her er en enkel avloggingskonfigurasjon:

beskyttet tomrom konfigurere (HttpSecurity http) kaster Unntak {http.logout (); }

Men hvis du vil ha mer kontroll over de tilgjengelige håndtererne, ser du hvordan en mer fullstendig implementering vil se ut:

beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster unntak {http.logout (). logoutUrl ("/ min / logout") .logoutSuccessUrl ("/ my / index") .logoutSuccessHandler (logoutSuccessHandler) .invalidateHttpSession (true) .addLogoutHandler .deleteCookies (cookieNamesToClear) .and () // noen andre metodeanrop}

8. Autentisering

La oss se på en annen måte å tillate autentisering med Spring Security på.

8.1. Autentisering i minnet

Vi starter med en enkel konfigurasjon i minnet:

@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Unntak {auth.inMemoryAuthentication () .withUser ("user"). Password (passwordEncoder (). Encode ("password")) .roller ("USER"). ((). withUser ("admin"). passord (passwordEncoder (). encode ("password")). roller ("USER", "ADMIN"); } 

8.2. JDBC-autentisering

For å flytte det til JDBC er alt du trenger å gjøre å definere en datakilde i applikasjonen - og bruke den direkte:

@Autowired private DataSource dataSource; @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Unntak {auth.jdbcAuthentication (). DataSource (dataSource) .withDefaultSchema () .withUser ("user"). Password (passwordEncoder (). Encode ("password")). "USER") .and () .withUser ("admin"). Password (passwordEncoder (). Encode ("password")) .roller ("USER", "ADMIN"); } 

Selvfølgelig, med begge eksemplene ovenfor, trenger vi også å definere PasswordEncoder bønne som beskrevet i avsnitt 3.

9. Konklusjon

I denne raske opplæringen gikk vi over det grunnleggende i Java Configuration for Spring Security og fokuserte på kodeeksemplene som illustrerer de enkleste konfigurasjonsscenariene.


$config[zx-auto] not found$config[zx-overlay] not found