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.