Dve prihlasovacie stránky s jarnou bezpečnosťou

1. Úvod

V tomto tutoriále uvidíme, ako môžeme nakonfigurujte Spring Security na prácu s dvoma rôznymi prihlasovacími stránkami pomocou dvoch rôznych Spring Security http prvkov v konfigurácii.

2. Konfigurácia 2 prvkov HTTP

Jednou zo situácií, v ktorých môžeme potrebovať dve prihlasovacie stránky, je situácia, keď máme jednu stránku pre správcov aplikácií a inú stránku pre bežných používateľov.

Budeme nakonfigurovať dva http prvkov ktoré sa budú líšiť podľa vzoru adresy URL priradenej ku každému:

  • / užívateľ * pre stránky, ktoré na prístup budú vyžadovať bežné overenie používateľa
  • / admin * pre stránky, ku ktorým bude mať prístup správca

Každý http prvok bude mať inú prihlasovaciu stránku a inú adresu URL na spracovanie prihlásenia.

Aby bolo možné nakonfigurovať dva rôzne http prvkov, vytvorme dve statické triedy s poznámkami @ Konfigurácia ktoré rozširujú WebSecurityConfigurerAdapter.

Oba budú umiestnené vo vnútri štamgastu @ Konfigurácia trieda:

@Configuration @EnableWebSecurity verejná trieda SecurityConfig {...}

Definujme WebSecurityConfigurerAdapter pre „ADMIN“ používatelia:

@Configuration @Order (1) verejná statická trieda App1ConfigurationAdapter rozširuje WebSecurityConfigurerAdapter {public App1ConfigurationAdapter () {super (); } @Override protected void configure (HttpSecurity http) vyvolá výnimku {http.antMatcher ("/ admin *") .authorizeRequests () .anyRequest () .hasRole ("ADMIN"). A () .formLogin () .loginPage (" / loginAdmin ") .loginProcessingUrl (" / admin_login ") .failureUrl (" / loginAdmin? error = loginError ") .defaultSuccessUrl (" / adminPage "). a () .logout () .logoutUrl (" / admin_logout ") .logoutSuccessUrl ("/ protectedLinks") .deleteCookies ("JSESSIONID") .and () .exceptionHandling () .accessDeniedPage ("/ 403") .and () .csrf (). disable (); }}

A teraz definujme WebSecurityConfigurerAdapter pre bežných používateľov:

@Configuration @Order (2) verejná statická trieda App2ConfigurationAdapter rozširuje WebSecurityConfigurerAdapter {public App2ConfigurationAdapter () {super (); } protected void configure (HttpSecurity http) vyvolá výnimku {http.antMatcher ("/ user *") .authorizeRequests () .anyRequest () .hasRole ("USER"). a () .formLogin () .loginPage ("/ loginUser" ") .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 (); }}

Upozorňujeme, že umiestnením @Objednať anotáciu pre každú statickú triedu, určujeme poradie, v ktorom sa tieto dve triedy budú brať do úvahy na základe zhody vzorov, keď sa požaduje adresa URL.

Dve konfiguračné triedy nemôžu mať rovnaké poradie.

3. Vlastné prihlasovacie stránky

Vytvoríme naše vlastné prihlasovacie stránky pre každý typ používateľa. Pre správcu bude mať prihlasovací formulár a „User_login“ akcia, ako je definované v konfigurácii:

Prihlasovacia stránka používateľa

Užívateľ:
Heslo:

Prihlasovacia stránka správcu je podobná, ibaže formulár bude mať akciu z „Admin_login“ podľa konfigurácie Java.

4. Konfigurácia autentifikácie

Teraz musíme nakonfigurovať autentifikáciu pre našu aplikáciu. Pozrime sa na dva spôsoby, ako to dosiahnuť - jeden pomocou spoločného zdroja na autentifikáciu používateľa a druhý pomocou dvoch samostatných zdrojov.

4.1. Používanie spoločného zdroja autentifikácie používateľa

Ak obe prihlasovacie stránky zdieľajú spoločný zdroj na autentifikáciu používateľov, môžete vytvoriť jeden fazuľa typu UserDetailsService ktorý bude spracovávať autentifikáciu.

Ukážme tento scenár pomocou znaku InMemoryUserDetailsManager ktorý definuje dvoch používateľov - jedného s rolou „USER“ a jeden s úlohou „ADMIN“:

@Bean public UserDetailsService userDetailsService () vyvolá výnimku {InMemoryUserDetailsManager manager = nový InMemoryUserDetailsManager (); manager.createUser (User .withUsername ("user") .password (encoder (). encode ("userPass")) .roles ("USER") .build ()); manager.createUser (Používateľ .withUsername ("admin") .password (encoder (). encode ("adminPass")) .roles ("ADMIN") .build ()); manažér návratu; } @Bean public static PasswordEncoder encoder () {return new BCryptPasswordEncoder (); }

4.2. Používanie dvoch rôznych zdrojov autentifikácie používateľa

Ak máte rôzne zdroje na autentifikáciu používateľov - jeden pre správcov a druhý pre bežných používateľov -, môžete nakonfigurovať AuthenticationManagerBuilder vo vnútri každej statickej @ Konfigurácia trieda. Pozrime sa na príklad správcu autentifikácie pre „ADMIN“ užívateľ:

@Configuration @Order (1) verejná statická trieda App1ConfigurationAdapter rozširuje WebSecurityConfigurerAdapter {@Override protected void configure (AuthenticationManagerBuilder auth) vyvolá výnimku {auth.inMemoryAuthentication () .withUser ("admin") .password (encoder (). )) .roles („ADMIN“); }}

V takom prípade UserDetailsService fazuľa z predchádzajúcej časti sa už nebude používať.

6. Záver

V tomto rýchlom výučbe sme si ukázali, ako implementovať dve rôzne prihlasovacie stránky v tej istej aplikácii Spring Security.

Celý kód tohto článku nájdete v projekte GitHub.

Po spustení aplikácie môžete získať prístup k príkladom vyššie na stránke / protectedLinks URI.


$config[zx-auto] not found$config[zx-overlay] not found