w , ,

FajneFajne Dobre!Dobre! ŚwietnieŚwietnie Że co?Że co? WnerwWnerw SmuteczekSmuteczek

Jak Implementować Mechanizmy Bezpieczeństwa w Spring Boot?

Nowy Spring Security
Nowy Spring Security

Od wersji Spring Boot 2.7 mamy wiele aktualizacji o których więcej dowiesz się z oficjalnego Patch Notes.

Dziś jednak przyjmy się najciekawszej zmianie – wśród aktualizacji pojawiła się nowa wersja Spring Security w ramach której dochodzi do rezygnacji z nadpisywania metod konfiguracyjnych pochodzących z WebSecurityConfigurerAdapter na rzecz definiowania odpowiednich beanów. To podejście jest bardziej spójne względem innych modułów Spring Boota, a ponadto wydajniejsze. Dodatkowo Twórcy Spring Boota zalecają wykorzystywanie lambd do implementacji.

Dla przybliżenia Ci tematu przygotowałem przykład definiowania użytkowników InMemory, a następnie zarządzanie ich dostępami. W pierwszej kolejności pokażę Ci rozwiązanie (starsze) dla wersji < 2.7, a następnie analogiczne rozwiązanie utrzymane w standardach nowego podejścia, które dotyczy wersji >= 2.7.

Klasa konfiguracyjna dla wersji < 2.7

@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public PasswordEncoder getBcryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        User user = new User("Jan",
                getBcryptPasswordEncoder().encode("jan123"),
                Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")));
        User admin = new User("admin",
                getBcryptPasswordEncoder().encode("admin123"),
                Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN")));

        auth.inMemoryAuthentication().withUser(user);
        auth.inMemoryAuthentication().withUser(admin);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/for-user").hasAnyRole("USER", "ADMIN")
                .antMatchers("/for-admin").hasAuthority("ROLE_ADMIN")
                .and()
                .formLogin().permitAll()
                .and()
                .logout().logoutUrl("/bye");

    }
}

Klasa konfiguracyjna dla wersji >= 2.7

@Configuration
public class SpringSecurityConfigNew {

    @Bean
    public PasswordEncoder getBcryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public InMemoryUserDetailsManager get() {
        UserDetails user = User.withUsername("jan")
                .password(getBcryptPasswordEncoder().encode("jan123"))
                .roles("USER")
                .build();
        UserDetails admin = User.withUsername("admin")
                .password(getBcryptPasswordEncoder().encode("admin123"))
                .roles("ADMIN")
                .build();
        return new InMemoryUserDetailsManager(Arrays.asList(user, admin));
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .authorizeRequests((autz) -&gt; autz
                        .antMatchers("/for-user").hasAnyRole("USER", "ADMIN")
                        .antMatchers("/for-admin").hasAuthority("ROLE_ADMIN")
                )
                .formLogin((formLogin) -&gt; formLogin.permitAll())
                .logout()
                .logoutSuccessUrl("/bye").permitAll();
        return http.build();
    }
}

Zapis ze szkolenia Live

A jeśli chcesz zobaczyć zobaczyć implementacje rozwiazań z wykorzystnaiem Spring Security w formie wideo, to zapraszam na ponad godzinny materiał obejmujący:

▶️ Uwierzytelnianie i Autoryzacja na przykładach
▶️ OAuth2 w integracji z Facebook
▶️ Nowości w Spring Boot (Security) od wersji 2.7

Najnowsze zmiany dotyczące Spring Security opisuje również w swoim LiveBooku ➜ https://LiveBooks.pl.

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Wzorzec proxy

Proxy – Wzorzec Projektowy Pełnomocnik [Wideo]

Książka Spring

W Końcu Wyczekana Premiera – Spirng Boot Livebook! Czemu Zajęło Mi To 3 Lata?