Tavaszi biztonsági űrlap bejelentkezés
1. Bemutatkozás
Ez a cikk a következőkre fog összpontosítani Bejelentkezés a Spring Security szolgáltatással. Az egyszerű előző tavaszi MVC példa tetejére építünk, mivel ez a webalkalmazás és a bejelentkezési mechanizmus felállításának szükséges része.
2. A Maven-függőségek
Amikor a Spring Boot programmal dolgozik, a spring-boot-starter-security Az indító automatikusan tartalmazza az összes függőséget, mint pl rugó-biztonsági mag, tavasz-biztonsági web és spring-security-config többek között:
org.springframework.boot spring-boot-starter-security 2.3.3.FELHASZNÁLÁS
Ha nem használjuk a Spring Boot alkalmazást, kérjük, olvassa el a Spring Security with Maven cikket, amely leírja az összes szükséges függőség hozzáadását. Mindkettő standard tavasz-biztonsági web és spring-security-config szükséges lesz.
3. Tavaszi biztonsági Java-konfiguráció
Kezdjük egy Spring Security konfigurációs osztály létrehozásával, amely kibővül WebSecurityConfigurerAdapter.
Hozzáadásával @EnableWebSecurity, megkapjuk a Spring Security és az MVC integrációs támogatását:
@Configuration @EnableWebSecurity nyilvános osztály A SecSecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Orride védett void konfigurációját (végső AuthenticationManagerBuilder auth) dobja a Exception {// hitelesítéskezelőt (lásd alább)} @Override védett void konfiguráció (végső HttpSecurity http végleges engedélyezési kérelmekhez és űrlap bejelentkezéshez (lásd alább)}}
Ebben a példában memórián belüli hitelesítést használtunk, és 3 felhasználót definiáltunk.
Ezután áttekintjük azokat az elemeket, amelyeket az űrlap bejelentkezési konfigurációjának létrehozásához használtunk.
Először készítsük el a Hitelesítéskezelőt.
3.1. Hitelesítéskezelő
A Hitelesítés-szolgáltatót egy egyszerű, memóriában található megvalósítás támogatja - InMemoryUserDetailsManager kimondottan. Ez akkor hasznos a gyors prototípus készítéshez, amikor még nincs szükség teljes perzisztencia mechanizmusra:
védett void configure (végleges AuthenticationManagerBuilder auth) dobja a (z) {auth.inMemoryAuthentication (). Kivételt (withUser ("user1"). Jelszó (passwordEncoder (). encode ("user1Pass")). szerepkörök ("USER"). ("user2"). jelszó (passwordEncoder (). encode ("user2Pass")). szerepek ("USER") és. ). szerepek ("ADMIN"); }
Itt három felhasználót konfigurálunk a felhasználónévvel, a jelszóval és a szerepkörrel kódoltan.
Az 5. tavasztól kezdve meg kell határoznunk egy jelszó kódolót is. Példánkban a BCryptPasswordEncoder:
@Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }
Ezután konfiguráljuk a HttpBiztonság.
3.2. Konfiguráció a kérelmek engedélyezéséhez
Kezdjük azzal, hogy elvégezzük a szükséges konfigurációkat a kérelmek engedélyezéséhez.
Itt engedélyezzük a névtelen hozzáférést /Belépés hogy a felhasználók hitelesíthessék magukat. Korlátozó / admin nak nek ADMIN szerepek és minden más biztosítása:
A @Orride védett void konfiguráció (végső HttpSecurity http) a {http .csrf (). Kivételet dobja ki. (Disable () .authorizeRequests () .antMatchers ("/ admin / **"). HasRole ("ADMIN") .antMatchers ("/ névtelen) * "). névtelen () .antMatchers (" / login * "). allowAll () .anyRequest (). hitelesített () .és () // ...}
Vegye figyelembe, hogy a antMatchers () elemek jelentősek - a konkrétabb szabályoknak kell elsőnek lenniük, majd az általánosabbaknak.
3.3. Konfiguráció az űrlap bejelentkezéshez
Ezután kibővítjük a fenti konfigurációt az űrlap bejelentkezéshez és a kijelentkezéshez:
A @Orride protected void configure (final HttpSecurity http) dobja a {http // ... .és () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ perform_login") .defaultSuccessUrl ("/) kivételt homepage.html ", true) .failureUrl (" / login.html? error = true ") .failureHandler (authenticationFailureHandler ()) .and () .logout () .logoutUrl (" / perform_logout ") .deleteCookies (" JSESSIONID " ) .logoutSuccessHandler (logoutSuccessHandler ()); }
- bejelentkezési oldal() - az egyéni bejelentkezési oldal
- loginProcessingUrl () - a felhasználónév és jelszó elküldésére szolgáló URL
- defaultSuccessUrl () - a céloldal sikeres bejelentkezés után
- FailUrl () - a céloldal sikertelen bejelentkezés után
- logoutUrl () - az egyéni kijelentkezés
4. Adja hozzá a Spring Security alkalmazást a webalkalmazáshoz
A fent definiált Spring Security konfiguráció használatához csatolnunk kell a webalkalmazáshoz.
Használjuk a WebApplicationInitializer, ezért nem kell semmit megadnunk web.xml:
public class AppInitializer végrehajtja a WebApplicationInitializer {@Override public void onStartup (ServletContext sc) {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (SecSecurityConfig.class); sc.addListener (új ContextLoaderListener (root)); sc.addFilter ("securityFilter", új DelegatingFilterProxy ("springSecurityFilterChain")) .addMappingForUrlPatterns (null, false, "/ *"); }}
Ne feledje, hogy ez az inicializáló nem szükséges, ha Spring Boot alkalmazást használunk. Tekintse meg a Spring Boot biztonsági automatikus konfigurálásával foglalkozó cikkünket, ahol további részletek találhatók arról, hogyan töltődik be a biztonsági konfiguráció a Spring Boot alkalmazásban.
5. A tavaszi biztonsági XML-konfiguráció
Vessünk egy pillantást a megfelelő XML konfigurációra is.
A teljes projekt Java konfigurációt használ, ezért az XML konfigurációs fájlt Java-on keresztül kell importálnunk @ Konfiguráció osztály:
@Configuration @ImportResource ({"classpath: webSecurityConfig.xml"}) public class SecSecurityConfig {public SecSecurityConfig () {super (); }}
És a tavaszi biztonsági XML-konfiguráció - webSecurityConfig.xml:
6. A web.xml
A 4. tavasz bevezetése előtt, a Spring Security konfigurációját a web.xml - csak egy kiegészítő szűrő van hozzáadva a standard rugós MVC-hez web.xml:
Spring Secured Application springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain / *
A szűrő - DelegatingFilterProxy - egyszerűen delegál egy tavasszal kezelt babot - a FilterChainProxy - amely maga is profitálhat a tavaszi bab teljes életciklus-kezeléséből és hasonlókból.
7. A bejelentkezési űrlap
A bejelentkezési űrlap oldalát regisztrálni kell a Spring MVC-nél az egyszerű mechanizmus segítségével, hogy a nézetek nevét URL-ekhez hozzárendelje, és nincs szükség kifejezett vezérlőre a következők között:
register.addViewController ("/ login.html");
Ez természetesen megfelel a login.jsp:
Felhasználó: Jelszó:
A Tavaszi bejelentkezési űrlap a következő releváns leletekkel rendelkezik:
- Belépés - az az URL, ahol az űrlap POST-olva van a hitelesítési folyamat elindításához
- felhasználónév - a felhasználónév
- Jelszó - a jelszó
8. A tavaszi bejelentkezés további konfigurálása
Röviden megvitattuk a bejelentkezési mechanizmus néhány konfigurációját, amikor bevezettük a fenti tavaszi biztonsági konfigurációt - most térjünk ki néhány részletre.
Az egyik ok a Spring Security alapértelmezett hibáinak felülbírálására az rejtse el azt a tényt, hogy az alkalmazást a Spring Security biztosítja és minimalizálja azokat az információkat, amelyeket egy potenciális támadó tud az alkalmazásról.
Teljesen konfigurálva a bejelentkezési elem így néz ki:
A @Orride protected void configure (HttpSecurity http) dobja a {http.formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ perform_login") .defaultSuccessUrl ("/ homepage.html", true) kivételt .failureUrl ( "/login.html?error=true")}
Vagy a megfelelő XML konfiguráció:
8.1. A bejelentkezési oldal
Ezután nézzük meg, hogyan konfigurálhatunk egy egyéni bejelentkezési oldalt a loginPage () metódus:
http.formLogin () .loginPage ("/ login.html")
Vagy XML konfigurációval:
login-page = '/ login.html'
Ha ezt nem adjuk meg, a Spring Security egy nagyon egyszerű bejelentkezési űrlapot hoz létre a /Belépés URL.
8.2. A bejelentkezés POST URL-je
Az alapértelmezett URL, ahol a tavaszi bejelentkezés POST-ot indít a hitelesítési folyamat elindításához /Belépés ami régen volt / j_spring_security_check tavaszi biztonság előtt 4.
Használhatjuk a loginProcessingUrl módszer az URL felülírására:
http.formLogin () .loginProcessingUrl ("/ perform_login")
Vagy XML konfigurációval:
login-processing-url = "/ perform_login"
Jó ok arra, hogy felülbírálja ezt az alapértelmezett URL-t, ha el akarja rejteni azt a tényt, hogy az alkalmazást ténylegesen a Spring Security védi - ez az információ nem áll rendelkezésre külsőleg.
8.3. A céloldal a sikerről
A sikeres bejelentkezési folyamat után a felhasználót egy oldalra irányítják - amely alapértelmezés szerint a webalkalmazás gyökere.
Ezt felülírhatjuk a defaultSuccessUrl () módszer:
http.formLogin () .defaultSuccessUrl ("/ homepage.html")
Vagy XML konfigurációval:
default-target-url = "/ homepage.html"
Abban az esetben, ha a always-use-default-target értéke true, akkor a felhasználót mindig erre az oldalra irányítják át. Ha az attribútum értéke hamis, akkor a felhasználót átirányítják az előző oldalra, amelyet meg akart látogatni, mielőtt a rendszer kéri a hitelesítést.
8.4. A céloldal a kudarcról
A bejelentkezési oldallal megegyezően a bejelentkezési hiba oldalt a Spring Security automatikusan generálja /Belépés?hiba alapértelmezés szerint.
Ennek felülbírálásához használhatjuk a FailUrl () módszer:
http.formLogin () .failureUrl ("/ login.html? hiba = igaz")
Vagy XML-lel:
hitelesítési hiba-url = "/ login.html? error = true"
9. Következtetés
Ebben Tavaszi bejelentkezés példa, konfiguráltunk egy egyszerű hitelesítési folyamatot - megtárgyaltuk a Tavaszi biztonsági bejelentkezési űrlapot, a Biztonsági konfigurációt és a rendelkezésre álló néhány fejlettebb testreszabást.
A tavaszi bejelentkezés oktatóanyagának megvalósítása megtalálható a GitHub projektben - ez egy Eclipse-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.
Amikor a projekt helyi szinten fut, a HTML minta a következő címen érhető el:
//localhost:8080/spring-security-mvc-login/login.html