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