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.


$config[zx-auto] not found$config[zx-overlay] not found