To påloggingssider med vårsikkerhet

1. Introduksjon

I denne opplæringen vil vi se hvordan vi kan konfigurer Spring Security til å fungere med to forskjellige påloggingssider bruker to forskjellige Spring Security http elementer i konfigurasjonen.

2. Konfigurere 2 Http-elementer

En av situasjonene der vi kan trenge to påloggingssider, er når vi har en side for administratorer av et program og en annen side for vanlige brukere.

Vi vil konfigurere to http elementer som vil bli differensiert av URL-mønsteret som er knyttet til hver:

  • /bruker* for sider som trenger normal brukerautentisering for å få tilgang
  • / admin * for sider som er tilgjengelige av en administrator

Hver http elementet vil ha en annen påloggingsside og en annen URL for påloggingsbehandling.

For å konfigurere to forskjellige http elementer, la oss lage to statiske klasser merket med @Konfigurasjon som utvider WebSecurityConfigurerAdapter.

Begge vil bli plassert i en vanlig @Konfigurasjon klasse:

@Configuration @EnableWebSecurity offentlig klasse SecurityConfig {...}

La oss definere WebSecurityConfigurerAdapter for “ADMIN” brukere:

@Configuration @ Order (1) offentlig statisk klasse App1ConfigurationAdapter utvider WebSecurityConfigurerAdapter {public App1ConfigurationAdapter () {super (); } @ Override beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster unntak {http.antMatcher ("/ admin *") .authorizeRequests () .anyRequest () .hasRole ("ADMIN"). Og () .formLogin () .loginPage (" / loginAdmin ") .loginProcessingUrl (" / admin_login ") .failureUrl (" / loginAdmin? error = loginError "). defaultSuccessUrl (" / adminPage "). og () .logout () .logoutUrl (" / admin_logout ") .logoutSuccessUr ("/ protectedLinks") .deleteCookies ("JSESSIONID"). og () .exceptionHandling () .accessDeniedPage ("/ 403"). og () .csrf (). deaktiver (); }}

La oss nå definere WebSecurityConfigurerAdapter for vanlige brukere:

@Configuration @ Order (2) offentlig statisk klasse App2ConfigurationAdapter utvider WebSecurityConfigurerAdapter {public App2ConfigurationAdapter () {super (); } beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster unntak {http.antMatcher ("/ user *") .authorizeRequests () .anyRequest () .hasRole ("USER"). og () .formLogin () .loginPage ("/ loginUser) ") .loginProcessingUrl (" / user_login ") .failureUrl (" / loginUser? error = loginError ") .defaultSuccessUrl (" / userPage ") .and () .logout () .logoutUrl (" / user_logout ") .logoutSuccessUrl (" / protectedLinks ") .deleteCookies (" JSESSIONID "). og () .exceptionHandling () .accessDeniedPage (" / 403 "). og () .csrf (). deaktiver (); }}

Merk at ved å plassere @Rekkefølge kommentar for hver statiske klasse, vi spesifiserer rekkefølgen som de to klassene vil bli vurdert basert på mønstermatchingen når en URL blir bedt om.

To konfigurasjonsklasser kan ikke ha samme rekkefølge.

3. Egendefinerte påloggingssider

Vi vil lage våre egne tilpassede påloggingssider for hver type bruker. For administratorbrukeren vil påloggingsskjemaet ha en "Brukerinnlogging" handling, som definert i konfigurasjonen:

Brukerinnloggingsside

Bruker:
Passord:

Administratorens påloggingsside er lik, bortsett fra at skjemaet vil ha en handling på “Admin_login” i henhold til java-konfigurasjonen.

4. Autentiseringskonfigurasjon

Nå må vi konfigurere autentisering for applikasjonen vår. La oss se på to måter å oppnå dette på: den ene bruker en felles kilde for brukerautentisering, og den andre bruker to separate kilder.

4.1. Bruke en vanlig brukergodkjenningskilde

Hvis begge påloggingssidene deler en felles kilde for å autentisere brukere, kan du opprette en enkelt bønne av typen UserDetailsService som vil håndtere godkjenningen.

La oss demonstrere dette scenariet ved hjelp av en InMemoryUserDetailsManager som definerer to brukere - en med rollen som "BRUKER" og en med en rolle som “ADMIN”:

@Bean offentlig UserDetailsService userDetailsService () kaster unntak {InMemoryUserDetailsManager manager = ny InMemoryUserDetailsManager (); manager.createUser (User .withUsername ("user") .password (encoder (). encode ("userPass")) .roles ("USER") .build ()); manager.createUser (User .withUsername ("admin") .password (encoder (). encode ("adminPass")) .roles ("ADMIN") .build ()); returleder; } @Bean offentlig statisk PasswordEncoder-koder () {returner ny BCryptPasswordEncoder (); }

4.2. Bruke to forskjellige brukergodkjenningskilder

Hvis du har forskjellige kilder for brukerautentisering - en for administratorer og en for vanlige brukere - kan du konfigurere en AuthenticationManagerBuilder inne i hver statisk @Konfigurasjon klasse. La oss se på et eksempel på en godkjenningssjef for en “ADMIN” bruker:

@Configuration @Order (1) offentlig statisk klasse App1ConfigurationAdapter utvider WebSecurityConfigurerAdapter {@Override beskyttet ugyldig konfigurasjon (AuthenticationManagerBuilder auth) kaster Unntak {auth.inMemoryAuthentication () .withUser ("admin") .password (encoder () ". Kode. )) .roles ("ADMIN"); }}

I dette tilfellet UserDetailsService bønne fra forrige avsnitt vil ikke lenger brukes.

6. Konklusjon

I denne raske opplæringen har vi vist hvordan du implementerer to forskjellige påloggingssider i samme Spring Security-applikasjon.

Den komplette koden for denne artikkelen finner du i GitHub-prosjektet.

Når du kjører applikasjonen, kan du få tilgang til eksemplene ovenfor på / protectedLinks URI.


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