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.