Grunnleggende autentisering av vårsikkerhet
1. Oversikt
Denne veiledningen viser hvordan du konfigurerer, konfigurerer og tilpasser Grunnleggende autentisering med våren. Vi kommer til å bygge på toppen av det enkle Spring MVC-eksemplet og sikre brukergrensesnittet til MVC-applikasjonen med Basic Auth-mekanismen som tilbys av Spring Security.
2. Vårens sikkerhetskonfigurasjon
Vi kan konfigurere Spring Security ved hjelp av Java config:
@Configuration @EnableWebSecurity offentlig klasse CustomWebSecurityConfigurerAdapter utvider WebSecurityConfigurerAdapter {@Autowired private MyBasicAuthenticationEntryPoint authenticationEntryPoint; @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Unntak {auth.inMemoryAuthentication () .withUser ("user1"). Passord (passwordEncoder (). Koding ("user1Pass")) .authorities ("ROLE_USER"); } @ Override beskyttet ugyldig konfigurering (HttpSecurity http) kaster Unntak {http.authorizeRequests () .antMatchers ("/ securityNone"). PermitAll () .anyRequest (). Autentisert () .and () .httpBasic () .authenticationEntryPoint (authenticationEntryPoint) ); http.addFilterAfter (ny CustomFilter (), BasicAuthenticationFilter.class); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}
Her bruker vi httpBasic () element for å definere grunnleggende autentisering, inne i konfigurer () metode for en klasse som strekker seg WebSecurityConfigurerAdapter.
Det samme kan oppnås ved å bruke XML også:
Det som er relevant her er element inne i hoveddelen element i konfigurasjonen - dette er nok til å aktivere grunnleggende autentisering for hele applikasjonen. Autentiseringsbehandling er ikke fokuset for denne opplæringen, så vi bruker en minnehåndtering med bruker og passord definert i ren tekst.
De web.xml av webapplikasjonen som muliggjør vårsikkerhet, har allerede blitt diskutert i våropplæringsveiledningen.
3. Forbruker den sikrede applikasjonen
De krølle kommando er vårt beste verktøy for å konsumere den sikrede applikasjonen.
La oss først prøve å be om /hjemmeside.html uten å oppgi sikkerhetsinformasjon:
curl -i // localhost: 8080 / spring-security-rest-basic-auth / api / foos / 1
Vi får tilbake det forventede 401 Uautorisert og autentiseringsutfordringen:
HTTP / 1.1 401 Uautorisert server: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = E5A8D3C16B65A0A007CFAACAEEE6916B; Path = / spring-security-mvc-basic-auth /; HttpOnly WWW-Authenticate: Basic realm = "Spring Security Application" Content-Type: text / html; charset = utf-8 Content-Length: 1061 Date: Wed, 29 May 2013 15:14:08 GMT
Nettleseren tolker denne utfordringen og ber oss om legitimasjon med en enkel dialog, men siden vi bruker krølle, dette er ikke tilfelle.
La oss nå be om samme ressurs - hjemmesiden - men gi legitimasjonen for å få tilgang til det også:
krøll -i --bruker bruker1: bruker1Pass // localhost: 8080 / fjær-sikkerhet-hvile-grunnleggende-autent / api / foos / 1
Nå er svaret fra serveren 200 OK sammen med en Kjeks:
HTTP / 1.1 200 OK Server: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = 301225C7AE7C74B0892887389996785D; Path = / spring-security-mvc-basic-auth /; HttpBly Content-Type: text / html; charset = ISO-8859-1 Content-Language: no-US Content-Length: 90 Date: Wed, 29 May 2013 15:19:38 GMT
Fra nettleseren kan applikasjonen forbrukes normalt - den eneste forskjellen er at en påloggingsside ikke lenger er et vanskelig krav, siden alle nettlesere støtter grunnleggende godkjenning og bruker en dialog for å be brukeren om legitimasjon.
4. Ytterligere konfigurasjon - than inngangspunkt
Som standard er BasicAuthenticationEntryPoint klargjort av Spring Security returnerer en hel side for en 401 Uautorisert svar tilbake til klienten. Denne HTML-representasjonen av feilen gjengis bra i en nettleser, men den passer ikke godt for andre scenarier, for eksempel et REST API der en json-representasjon kan være å foretrekke.
Navnområdet er også fleksibelt for dette nye kravet - for å løse dette - inngangspunktet kan overstyres:
Det nye inngangspunktet er definert som en standard bønne:
@Komponent offentlig klasse MyBasicAuthenticationEntryPoint utvider BasicAuthenticationEntryPoint {@Override public void commence (HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx) throws IOException, ServletException {response.addHeader ("WWR") " respons.setStatus (HttpServletResponse.SC_UNAUTHORIZED); PrintWriter-forfatter = respons.getWriter (); writer.println ("HTTP Status 401 -" + authEx.getMessage ()); } @ Override public void afterPropertiesSet () kaster unntak {setRealmName ("Baeldung"); super.afterPropertiesSet (); }}
Ved å skrive direkte til HTTP-responsen har vi nå full kontroll over formatet til responsorganet.
5. Maven-avhengighetene
Maven-avhengighetene for vårsikkerhet har blitt diskutert før i vårsikkerhet med Maven-artikkelen - vi trenger begge deler vår-sikkerhets-web og vår-sikkerhet-config tilgjengelig på kjøretid.
6. Konklusjon
I dette eksemplet sikret vi en MVC-applikasjon med Spring Security og Basic Authentication. Vi diskuterte XML-konfigurasjonen, og vi konsumerte applikasjonen med enkle krøllkommandoer. Til slutt tok kontroll over det nøyaktige feilmeldingsformatet - flyttet fra standard HTML-feilsiden til en tilpasset tekst eller JSON-format.
Den fulle implementeringen av denne opplæringen finner du i GitHub-prosjektet - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.
Når prosjektet kjøres lokalt, kan du få tilgang til HTML-eksemplet på:
// localhost: 8080 / spring-security-rest-basic-auth / api / foos / 1.