Osnovna provjera autentičnosti Spring Security

1. Pregled

Ovaj vodič pokazuje kako postaviti, konfigurirati i prilagoditi Osnovna provjera autentičnosti s Springom. Izgradit ćemo povrh jednostavnog primjera Spring MVC i osigurati korisničko sučelje aplikacije MVC pomoću mehanizma Basic Auth koji pruža Spring Security.

2. Proljetna sigurnosna konfiguracija

Spring Security možemo konfigurirati pomoću Java config:

@Configuration @EnableWebSecurity javna klasa CustomWebSecurityConfigurerAdapter proširuje WebSecurityConfigurerAdapter {@Autowired private MyBasicAuthenticationEntryPoint authenticationEntryPoint; @Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca iznimku {auth.inMemoryAuthentication () .withUser ("user1"). Password (passwordEncoder (). Encode ("user1Pass")) .authorities ("ROLE_USER"); } @Override zaštićena void konfiguracija (HttpSecurity http) baca izuzetak {http.authorizeRequests () .antMatchers ("/ securityNone"). AllowAll () .anyRequest (). ); http.addFilterAfter (novi CustomFilter (), BasicAuthenticationFilter.class); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Ovdje koristimo httpBasic () element za definiranje osnovne provjere autentičnosti, unutar konfigurirati() metoda klase koja se proteže WebSecurityConfigurerAdapter.

Isto bi se moglo postići i korištenjem XML-a:

Ono što je ovdje relevantno je element unutar glavnog element konfiguracije - to je dovoljno da se omogući osnovna provjera autentičnosti za cijelu aplikaciju. Upravitelj provjere autentičnosti nije fokus ovog vodiča, pa koristimo upravitelj u memoriji s korisnikom i lozinkom definiranim u otvorenom tekstu.

The web.xml web aplikacije koja omogućuje Spring Security već je raspravljano u vodiču Spring Logout.

3. Konzumiranje osigurane aplikacije

The kovrča naredba je naš alat za pristup sigurnoj aplikaciji.

Prvo, pokušajmo zatražiti /homepage.html bez davanja bilo kakvih sigurnosnih vjerodajnica:

curl -i // localhost: 8080 / spring-security-rest-basic-auth / api / foos / 1

Vraćamo očekivano 401 Neovlašteno i izazov za autentifikaciju:

HTTP / 1.1 401 Neovlašteni poslužitelj: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = E5A8D3C16B65A0A007CFAACAEEE6916B; Put = / spring-security-mvc-basic-auth /; HttpOnly WWW-Autentifikacija: Osnovno područje = "Proljetna sigurnosna aplikacija" Vrsta sadržaja: text / html; charset = utf-8 Trajanje sadržaja: 1061 Datum: srijeda, 29. svibnja 2013. 15:14:08 GMT

Preglednik bi protumačio ovaj izazov i zatražio vjerodajnice jednostavnim dijaloškim okvirom, ali budući da ga koristimo kovrča, to nije slučaj.

Zamolimo sada isti resurs - početnu stranicu - ali dostaviti vjerodajnice da biste mu također pristupili:

curl -i --user user1: user1Pass // localhost: 8080 / spring-security-rest-basic-auth / api / foos / 1

Sada je odgovor poslužitelja 200 OK zajedno s a Kolačić:

HTTP / 1.1 200 OK poslužitelj: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = 301225C7AE7C74B0892887389996785D; Put = / spring-security-mvc-basic-auth /; HttpOnly Content-Type: text / html; charset = ISO-8859-1 Content-Language: hr-US Content-Length: 90 Datum: Wed, 29. svibnja 2013. 15:19:38 GMT

Iz preglednika se aplikacija može normalno trošiti - jedina je razlika u tome što stranica za prijavu više nije težak zahtjev jer svi preglednici podržavaju osnovnu provjeru autentičnosti i koriste dijaloški okvir za pozivanje korisnika za vjerodajnice.

4. Daljnja konfiguracija - ton ulazna točka

Prema zadanim postavkama BasicAuthenticationEntryPoint koju je osigurao Spring Security vraća cijelu stranicu za 401 Neovlašteno odgovor natrag klijentu. Ovaj HTML prikaz pogreške dobro se prikazuje u pregledniku, ali nije dobro prikladan za druge scenarije, kao što je REST API, gdje se može dati prednost json predstavljanju.

Prostor imena je dovoljno fleksibilan i za ovaj novi zahtjev - da bi se to riješilo - ulazna točka može se nadjačati:

Nova ulazna točka definirana je kao standardni grah:

@Component javna klasa MyBasicAuthenticationEntryPoint proširuje BasicAuthenticationEntryPoint {@Override javna void započinje (HttpServletRequest zahtjev, HttpServletResponse odgovor, AuthenticationException authEx) baca IOException, "Resv. response.setStatus (HttpServletResponse.SC_UNAUTHORIZED); Writer za PrintWriter = response.getWriter (); writer.println ("HTTP Status 401 -" + authEx.getMessage ()); } @Override public void afterPropertiesSet () baca iznimku {setRealmName ("Baeldung"); super.afterPropertiesSet (); }}

Pišući izravno na HTTP odgovor, sada imamo potpunu kontrolu nad formatom tijela odgovora.

5. Ovisnosti Mavena

O ovisnostima Mavena za Spring Security već je bilo riječi u članku Spring Security with Maven - trebat će nam oboje proljeće-sigurnost-web i opruga-sigurnost-konfiguracija dostupno za vrijeme izvođenja.

6. Zaključak

U ovom smo primjeru osigurali MVC aplikaciju s Spring Security i Basic Authentication. Raspravljali smo o XML konfiguraciji i aplikaciju smo konzumirali jednostavnim naredbama curl. Napokon je preuzeo kontrolu nad točnim formatom poruke o pogrešci - prelaskom sa standardne HTML stranice s pogreškama na prilagođeni tekst ili JSON format.

Potpuna implementacija ovog vodiča može se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.

Kada se projekt izvodi lokalno, primjeru HTML-a može se pristupiti na:

// localhost: 8080 / spring-security-rest-basic-auth / api / foos / 1.