Spring Security Husk mig
1. Oversigt
Denne tutorial vises hvordan du aktiverer og konfigurerer Husk mig-funktionalitet i en webapplikation med Spring Security. Opsætning af MVC-applikationen med sikkerhed og et simpelt formularlogin er allerede blevet drøftet.
Mekanismen vil være i stand til identificer brugeren på tværs af flere sessioner - så den første ting at forstå er, at Remember Me kun sparker ind efter sessionens timeout. Som standard sker dette efter 30 minutters inaktivitet, men timeout kan konfigureres i web.xml.
Bemærk: denne vejledning fokuserer på standard cookie-baseret tilgang. For den vedvarende tilgang, se på Spring Security - Persistent Remember Me-guiden.
2. Sikkerhedskonfigurationen
Lad os se, hvordan du konfigurerer sikkerhedskonfigurationen ved hjælp af Java:
@Configuration @EnableWebSecurity offentlig klasse SecSecurityConfig udvider WebSecurityConfigurerAdapter {@Bean ("authenticationManager") @ Override public AuthenticationManager authenticationManagerBean () kaster undtagelse {returnerer super.authenticationManagerBean (); } @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Undtagelse {auth.inMemoryAuthentication () .withUser ("user1"). Adgangskode ("{noop} user1Pass") .roller ("USER"). Og () .withUser (" admin1 "). adgangskode (" {noop} admin1Pass "). roller (" ADMIN "); } @ Override beskyttet ugyldig konfiguration (endelig HttpSecurity http) kaster undtagelse {http.authorizeRequests () .antMatchers ("/ anonym *"). Anonym () .antMatchers ("/ login *"). PermitAll () .anyRequest (). godkendt () .og () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ login"). fejlUrl ("/ login.html? fejl = sand"). og () .logout ( ) .deleteCookies ("JSESSIONID") .og () .rememberMe (). nøgle ("unikAndSecret"); }}
Som du kan se, den grundlæggende konfiguration ved hjælp af Husk mig() metode er ekstremt enkel, mens den forbliver meget fleksibel gennem yderligere muligheder. Det nøgle er vigtigt her - det er en privat værdihemmelighed for hele applikationen, og den vil blive brugt til generering af tokens indhold.
Derudover er tid, som tokenet er gyldigt, kan konfigureres fra standard på 2 uger til - for eksempel - en dag med tokenValiditySeconds ():
rememberMe (). nøgle ("unikAndSecret"). tokenValiditySeconds (86400)
Vi kan også se på den tilsvarende XML-konfiguration:
3. Loginformularen
Loginformularen ligner den, vi brugte til formularlogin:
Bruger: Adgangskode: Husk mig:
Bemærk det nyligt tilføjede afkrydsningsfelt input - kortlægning til Husk mig. Dette tilføjede input er nok til at logge ind med husk mig aktiv.
Denne standardsti kan også ændres som følger:
.rememberMe (). rememberMeParameter ("husk mig-ny")
4. Cookien
Mekanismen opretter en ekstra cookie - "husk mig" -cookien - når brugeren logger ind.
Det Husk mig cookie indeholder følgende data:
- brugernavn - for at identificere den indlogede hovedstol
- udløbstid - at udløbe cookien standard er 2 uger
- MD5 hash - af de foregående 2 værdier - brugernavn og udløbstid, plus adgangskode og det foruddefinerede nøgle
Den første ting at bemærke her er, at begge brugernavn og adgangskode er en del af cookien - det betyder, at hvis en af dem ændres, er cookien ikke længere gyldig. Også den brugernavn kan læses fra cookien.
Derudover er det vigtigt at forstå, at denne mekanisme er potentielt sårbar, hvis husk mig-cookien er fanget. Cookien er gyldig og anvendelig indtil den udløber, eller legitimationsoplysningerne ændres.
5. I praksis
For nemt at se husk mig-mekanismen fungerer kan du:
- log ind med husk mig aktiv
- vent på, at sessionen udløber (eller fjern JSESSIONID cookie i browseren)
- opdater siden
Uden at huske mig aktiv, skal brugeren være, efter at cookien udløber omdirigeres tilbage til login-siden. Med husk mig, brugeren nu forbliver logget ind ved hjælp af det nye token / cookie.
6. Konklusion
Denne vejledning viste, hvordan du opsætter og konfigurerer Husk mig-funktionalitet i sikkerhedskonfigurationen, og kort beskrevet, hvilken slags data der er indeholdt i cookien.
Implementeringen kan findes i eksemplet med Github-projektet - dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er.
Når projektet kører lokalt, login.html kan tilgås på localhost.