Spring Security Husk meg
1. Oversikt
Denne opplæringen vil vises hvordan du aktiverer og konfigurerer Remember Me-funksjonalitet i et webapplikasjon med Spring Security. Å sette opp MVC-applikasjonen med sikkerhet og en enkel skjemainnlogging har allerede blitt diskutert.
Mekanismen vil kunne identifisere brukeren på tvers av flere økter - så det første du må forstå er at Husk meg bare sparker inn etter øktens tidsavbrudd. Som standard skjer dette etter 30 minutters inaktivitet, men tidsavbrudd kan konfigureres i web.xml.
Merk: denne opplæringen fokuserer på den standard informasjonskapselbaserte tilnærmingen. For den vedvarende tilnærmingen, ta en titt på Spring Security - Persistent Remember Me-guiden.
2. Sikkerhetskonfigurasjonen
La oss se hvordan du konfigurerer sikkerhetskonfigurasjonen ved hjelp av Java:
@Configuration @EnableWebSecurity offentlig klasse SecSecurityConfig utvider WebSecurityConfigurerAdapter {@Bean ("authenticationManager") @ Override public AuthenticationManager authenticationManagerBean () kaster Unntak {return super.authenticationManagerBean (); } @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Unntak {auth.inMemoryAuthentication () .withUser ("user1"). Passord ("{noop} user1Pass"). Roller ("USER"). Og () .withUser (" admin1 "). passord (" {noop} admin1Pass "). roller (" ADMIN "); } @ Override beskyttet ugyldig konfigurasjon (endelig HttpSecurity http) kaster Unntak {http.authorizeRequests () .antMatchers ("/ anonym *"). Anonym () .antMatchers ("/ login *"). PermitAll () .anyRequest (). autentisert () .og () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ login"). failureUrl ("/ login.html? error = true"). og () .logout ( ) .deleteCookies ("JSESSIONID"). og () .rememberMe (). nøkkel ("unikAndSecret"); }}
Som du kan se, den grunnleggende konfigurasjonen ved hjelp av Husk meg() metode er ekstremt enkel, men forblir veldig fleksibel gjennom flere alternativer. De nøkkel er viktig her - det er en privat verdihemmelighet for hele applikasjonen, og den vil bli brukt når du genererer innholdet i tokenet.
I tillegg har tid token er gyldig kan konfigureres fra standard på 2 uker til - for eksempel - en dag med tokenValiditySeconds ():
rememberMe (). nøkkel ("unikAndSecret"). tokenValiditySeconds (86400)
Vi kan også se på den tilsvarende XML-konfigurasjonen:
3. Påloggingsskjemaet
Påloggingsskjemaet ligner på det vi brukte for skjemainnlogging:
Bruker: Passord: Husk meg:
Legg merke til det nylig lagt til avkrysningsruten input - kartlegging til Husk meg. Denne innspillingen er nok til å logge inn med husk meg aktiv.
Denne standardstien kan også endres som følger:
.rememberMe (). rememberMeParameter ("husk meg-ny")
4. Cookien
Mekanismen vil opprette en ekstra informasjonskapsel - "husk meg" -kaken - når brukeren logger på.
De Husk meg informasjonskapsel inneholder følgende data:
- brukernavn - for å identifisere den påloggede rektoren
- utløpstid - for å utgå cookien; standard er 2 uker
- MD5 hash - av de to foregående verdiene - brukernavn og utløpstid, pluss passord og det forhåndsdefinerte nøkkel
Det første du må legge merke til her er at både brukernavn og passord er en del av informasjonskapselen - dette betyr at informasjonskapselen ikke lenger er gyldig, hvis en av dem endres. Også, den brukernavn kan leses fra informasjonskapselen.
I tillegg er det viktig å forstå at denne mekanismen er potensielt sårbar hvis husk meg-informasjonskapselen blir fanget. Cookien vil være gyldig og brukbar til den utløper eller legitimasjonen blir endret.
5. I praksis
For å enkelt se husk meg-mekanismen som fungerer, kan du:
- logg inn med husk meg aktiv
- vent til økten utløper (eller fjern JSESSIONID informasjonskapsel i nettleseren)
- Oppdater siden
Uten å huske meg aktiv, bør brukeren være det etter at cookien utløper omdirigert tilbake til påloggingssiden. Med husk meg, brukeren nå forblir pålogget ved hjelp av det nye token / informasjonskapselen.
6. Konklusjon
Denne veiledningen viste hvordan du konfigurerer og konfigurerer Husk meg-funksjonaliteten i sikkerhetskonfigurasjonen, og beskrev kort hva slags data som ligger i informasjonskapselen.
Implementeringen finner du i eksemplet Github-prosjekt - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.
Når prosjektet kjører lokalt, vil login.html kan nås på localhost.