Két bejelentkezési oldal tavaszi biztonsággal

1. Bemutatkozás

Ebben az oktatóanyagban meglátjuk, hogyan tudunk konfigurálja a Spring Security programot két különböző bejelentkezési oldalra két különböző Spring Security használatával http elemek a konfigurációban.

2. 2 Http elem beállítása

Az egyik olyan eset, amikor két bejelentkezési oldalra lehet szükségünk, az az, amikor egy oldalunk van egy alkalmazás rendszergazdáinak, és egy másik oldal a normál felhasználók számára.

Mi fogunk konfiguráljon kettőt http elemek amelyet meg fog különböztetni az egyes URL-ek mintája:

  • / felhasználó * azokhoz az oldalakhoz, amelyek eléréséhez normál felhasználói hitelesítés szükséges
  • / admin * azokhoz az oldalakhoz, amelyeket egy rendszergazda fog elérni

Minden egyes http elemnek más bejelentkezési oldala és más bejelentkezési URL-je lesz.

Két különböző konfigurálásához http elemeket, hozzunk létre két statikus osztályt, amelyekhez jegyzeteket fűzünk @ Konfiguráció amelyek kiterjesztik a WebSecurityConfigurerAdapter.

Mindkettő egy normál belsejében lesz @ Konfiguráció osztály:

@Configuration @EnableWebSecurity public class SecurityConfig {...}

Határozzuk meg a WebSecurityConfigurerAdapter a „ADMIN” felhasználók:

@Configuration @Order (1) public static class App1ConfigurationAdapter kiterjeszti a WebSecurityConfigurerAdapter {public App1ConfigurationAdapter () {super (); } A @Orride védett void konfiguráció (HttpSecurity http) dobja a {http.antMatcher ("/ admin *") kivételt .authorizeRequests () .anyRequest () .hasRole ("ADMIN") .and () .formLogin () .loginPage (" / loginAdmin ") .loginProcessingUrl (" / admin_login ") .failureUrl (" / loginAdmin? error = loginError ") .defaultSuccessUrl (" / adminPage ") .and () .logout () .logoutUrl (" / admin_logout ") .logoutSuccessUrl ("/ protectedLinks") .deleteCookies ("JSESSIONID") .and () .exceptionHandling () .accessDeniedPage ("/ 403") .és () .csrf (). disable (); }}

És most definiáljuk a WebSecurityConfigurerAdapter normál felhasználók számára:

@Configuration @Order (2) public static class App2ConfigurationAdapter kiterjeszti a WebSecurityConfigurerAdapter {public App2ConfigurationAdapter () {super (); } védett void configure (HttpSecurity http) dobja a (z) {http.antMatcher ("/ user *") .authorizeRequests () .anyRequest () .hasRole ("USER") .and () .formLogin () .loginPage ("/ loginUser) kivételt ") .loginProcessingUrl (" / user_login ") .failureUrl (" / loginUser? error = loginError ") .defaultSuccessUrl (" / userPage ") .and () .logout () .logoutUrl (" / user_logout ") .logoutSuccessUrl (" / protectedLinks ") .deleteCookies (" JSESSIONID ") .and () .exceptionHandling () .accessDeniedPage (" / 403 ") .and () .csrf (). disable (); }}

Vegye figyelembe, hogy a @Rendelés az egyes statikus osztályokhoz tartozó megjegyzéseket, megadjuk a sorrendet, amelyben a két osztályt figyelembe vesszük a mintaillesztés alapján, amikor URL-t kérünk.

Két konfigurációs osztálynak nem lehet azonos sorrendje.

3. Egyéni bejelentkezési oldalak

Saját felhasználói bejelentkezési oldalakat fogunk létrehozni minden felhasználói típushoz. Az adminisztrátor felhasználó számára a bejelentkezési űrlapon a "bejelentkezés" művelet, a konfigurációban definiálva:

Felhasználói bejelentkezési oldal

Felhasználó:
Jelszó:

A rendszergazda bejelentkezési oldala hasonló, kivéve, hogy az űrlap művelete a „Admin_login” a java konfiguráció szerint.

4. Hitelesítés konfigurálása

Most nekünk kell konfigurálja az alkalmazás hitelesítését. Nézzük meg ennek megvalósításának két módját - az egyiket közös forrással a felhasználói hitelesítéshez, a másikat két külön forrás felhasználásával.

4.1. Közös felhasználói hitelesítési forrás használata

Ha mindkét bejelentkezési oldal közös forrást használ a felhasználók hitelesítéséhez, akkor létrehozhat egyetlen típusú babot UserDetailsService amely kezeli a hitelesítést.

Bemutassuk ezt a forgatókönyvet egy InMemoryUserDetailsManager amely két felhasználót határoz meg - az egyik szerepe „USER” és az egyik szerepe „ADMIN”:

@Bean public UserDetailsService userDetailsService () kiveti a {InMemoryUserDetailsManager manager = új InMemoryUserDetailsManager () kivételt; manager.createUser (Felhasználó .withUsername ("felhasználó") .jelszó (encoder (). encode ("userPass")) .roles ("USER") .build ()); manager.createUser (Felhasználó .withUsername ("admin") .jelszó (encoder (). encode ("adminPass")) .roles ("ADMIN") .build ()); visszatérési menedzser; } @Bean public static PasswordEncoder encoder () {return new BCryptPasswordEncoder (); }

4.2. Két különböző felhasználói hitelesítési forrás használata

Ha különböző forrásokkal rendelkezik a felhasználói hitelesítéshez - egyet rendszergazdáknak és egyet normál felhasználóknak - konfigurálhat egy AuthenticationManagerBuilder minden statikus belsejében @ Konfiguráció osztály. Nézzünk meg egy példát a „ADMIN” felhasználó:

A @Configuration @Order (1) nyilvános statikus osztály, az App1ConfigurationAdapter kiterjeszti a WebSecurityConfigurerAdapter {@Orride védett érvénytelen konfigurációját (AuthenticationManagerBuilder auth) a (z) {auth.inMemoryAuthentication (). Kivételt ("admin"). )). szerepek ("ADMIN"); }}

Ebben az esetben a UserDetailsService Az előző szakaszban szereplő bab nem kerül felhasználásra.

6. Következtetés

Ebben a gyors bemutatóban bemutattuk, hogyan lehet két különböző bejelentkezési oldalt megvalósítani ugyanabban a Spring Security alkalmazásban.

A cikk teljes kódja a GitHub projektben található.

Az alkalmazás futtatásakor elérheti a fenti példákat a / protectedLinks URI.