Uvod u Java Config za proljetnu sigurnost

1. Pregled

Ovaj je članak uvod u Java konfiguraciju za Spring Security koji korisnicima omogućuje lako konfiguriranje Spring Security-a bez upotrebe XML-a.

Java konfiguracija dodana je u Spring Spring u proljeće 3.1, a proširena je na Spring Security u Spring 3.2 i definirana je u označenoj klasi @Konfiguracija.

2. Postavljanje Mavena

Da bismo koristili Spring Security u projektima Maven, prvo moramo imati opruga-sigurnosna-jezgra ovisnost u projektu pom.xml:

 org.springframework.security proljeće-sigurnost-jezgra 5.3.3.OBUSTAŽANJE 

Najnoviju verziju uvijek možete pronaći ovdje.

3. Web sigurnost s Java konfiguracijom

Počnimo s osnovnim primjerom Java Security konfiguracije Spring Spring:

@EnableWebSecurity javna klasa SecurityConfig proširuje WebSecurityConfigurerAdapter {@Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca izuzetak {auth.inMemoryAuthentication (). WithUser ("korisnik"). Lozinka (lozinka "encEncoder.). KORISNIK"); }}

Kao što ste mogli primijetiti, konfiguracija postavlja osnovnu konfiguraciju provjere autentičnosti u memoriji. Uz to, počevši od proljeća 5, trebamo i PasswordEncoder grah:

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

4. HTTP sigurnost

Da bismo omogućili HTTP sigurnost na proljeće, moramo proširiti WebSecurityConfigurerAdapter za zadavanje zadane konfiguracije u programu konfigurirati (HttpSecurity http) metoda:

zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http.authorizeRequests () .anyRequest (). authenticated () .and (). httpBasic (); } 

Gornja zadana konfiguracija osigurava provjeru autentičnosti bilo kojeg zahtjeva za aplikaciju prijavom na temelju obrasca ili osnovnom HTTP provjerom autentičnosti.

Također, potpuno je sličan sljedećoj XML konfiguraciji:

5. Prijava na obrazac

Zanimljivo je da Spring Security automatski generira stranicu za prijavu, na temelju značajki koje su omogućene i koristeći standardne vrijednosti za URL koji obrađuje poslanu prijavu:

zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http.authorizeRequests () .anyRequest (). authenticated () .and (). formLogin () .loginPage ("/ login"). dozvolaAll (); }

Ovdje je automatski generirana stranica za prijavu prikladna za brzo pokretanje i pokretanje.

6. Odobrenje s ulogama

Konfigurirajmo sada jednostavnu autorizaciju na svakom URL-u pomoću uloga:

zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http.authorizeRequests () .antMatchers ("/", "/home").access("hasRole('USER ')") .antMatchers ("/ admin / **") .hasRole ("ADMINISTRATIRATI"). i () // još neki poziv metode .formLogin (); }

Primijetite kako koristimo oba API-ja sigurna za tip - hasRole - ali i API zasnovan na izrazu putem pristup.

7. Odjava

Kao i mnogi drugi aspekti Spring Securitya, odjava ima neke velike zadane vrijednosti koje pruža okvir.

Prema zadanim postavkama zahtjev za odjavu onemogućava sesiju, briše sve predmemorije provjere autentičnosti, briše SecurityContextHolder i preusmjerava na stranicu za prijavu.

Evo jednostavne konfiguracije odjave:

zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http.logout (); }

Međutim, ako želite dobiti veću kontrolu nad dostupnim rukovateljima, evo kako će izgledati potpunija implementacija:

zaštićena void konfiguracija (HttpSecurity http) baca izuzetak {http.logout (). logoutUrl ("/ my / logout") .logoutSuccessUrl ("/ my / index") .logoutSuccessHandler (logoutSuccessHandler) .invalidateHttpSession (true) .addandler .deleteCookies (cookieNamesToClear) .and () // neki drugi pozivi metode}

8. Autentifikacija

Pogledajmo još jedan način omogućavanja provjere autentičnosti s Spring Security.

8.1. Provjera autentičnosti u memoriji

Počet ćemo s jednostavnom konfiguracijom u memoriji:

@Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca iznimku {auth.inMemoryAuthentication () .withUser ("user"). Password (passwordEncoder (). Encode ("password")). Role ("USER") .and (). withUser ("admin"). password (passwordEncoder (). encode ("password")). uloge ("USER", "ADMIN"); } 

8.2. JDBC provjera autentičnosti

Da biste to premjestili u JDBC, sve što morate učiniti je definirati izvor podataka unutar aplikacije - i to izravno upotrijebiti:

@Autowired privatni DataSource dataSource; @Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca iznimku {auth.jdbcAuthentication (). DataSource (dataSource) .withDefaultSchema () .withUser ("user"). Password (passwordEncoder (). Encode ("lozinka")). "USER") .and () .withUser ("admin"). Password (passwordEncoder (). Encode ("password")). Role ("USER", "ADMIN"); } 

Naravno, s oba gornja primjera, također moramo definirati i PasswordEncoder grah kako je opisano u odjeljku 3.

9. Zaključak

U ovom smo brzom vodiču prošli kroz osnove Java Configuration for Spring Security i usredotočili se na uzorke koda koji ilustriraju najjednostavnije konfiguracijske scenarije.