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.