Implementacja uwierzytelniania i autoryzacji opartej na rolach zabezpieczeń Spring za pomocą Spring Boot 3.0
Witajcie, tutaj dowiemy się o wiosennej implementacji zabezpieczeń za pomocą Spring Boot. Bezpieczeństwo Spring zapewnia uwierzytelnianie, autoryzację i ochronę przed typowymi atakami.
Uwierzytelnianie - Uwierzytelnianie to sposób, w jaki weryfikujemy tożsamość użytkownika próbującego uzyskać dostęp do określonego zasobu, po przeprowadzeniu uwierzytelnienia znamy tożsamość i możemy przeprowadzić autoryzację.
Autoryzacja - Autoryzacja oznacza udzielenie pozwolenia na dostęp do określonego zasobu/adresu URL.
Kroki w celu wdrożenia zabezpieczeń wiosennych
Krok 1: Dodaj zależność Spring Security w POM.XML
Krok 2: Utwórz klasę konfiguracji, dodaj metody uwierzytelniania i autoryzacji.
@EnableWebSecurity zapewnia domyślną konfigurację bezpieczeństwa naszej aplikacji. Domyślne zabezpieczenia aktywują zarówno filtry bezpieczeństwa HTTP, jak i łańcuch filtrów bezpieczeństwa oraz stosują podstawowe uwierzytelnianie w naszych punktach końcowych.
@Configuration mówi Spring Bootowi, aby przeskanował klasę w poszukiwaniu definicji komponentów bean i zarejestrował je w kontekście aplikacji.
Metoda AuthenticateProvider() służy do przechowywania wszystkich szczegółów użytkownika, takich jak nazwa użytkownika, hasło, role. Spring Security zawiera klasę DaoAuthenticationProvider, która zawiera userDetailsService i passwordEncoder.passwordEncoder() służy do szyfrowania hasła, a zaszyfrowane hasło jest przechowywane w bazie danych.
Metoda SecutityFilterChain() służy tutaj do autoryzacji zasobów
.requestMatchers("/products/welcome","/products/new").permitAll() ma dać dostęp wszystkim użytkownikom, każdy użytkownik może uzyskać dostęp do tych dwóch adresów URL.
requestMatchers(“/products/**”).authenticated() ma na celu umożliwienie dostępu uwierzytelnionym użytkownikom.
Krok 3: Zaimplementuj autoryzację opartą na rolach
@PreAuthorize
adnotacja służy do określenia wyrażenia, które zostanie ocenione przed wykonaniem metody. Jeśli wyrażenie ma wartość true, metoda jest wykonywana w przeciwnym razie, zgłaszany jest wyjątek AccessDeniedException.
Metoda getAllProducts()
może być wykonywana tylko przez użytkowników z ROLE_USER
rolą, podczas gdy getProductById()
metoda może być wykonywana przez użytkowników z ROLE_ADMIN
rolą.
Testowanie implementacji
Dodano przykładowy kod, aby przetestować implementację.
Po podaniu poświadczeń użytkownika użytkownik może uzyskać dostęp do punktu końcowego użytkownika
Gdy użytkownik spróbuje uzyskać dostęp do punktu końcowego administratora przy użyciu poświadczeń użytkownika, zostanie wyświetlona strona błędu
Uwaga: jeśli chcesz działający kod github tej implementacji, śledź mnie i skomentuj swój identyfikator e-mail. Link do kodu źródłowego prześlę na Twój adres e-mail.
Część 2: Spring Security Uwierzytelnianie i autoryzacja za pomocą JWT
Linki do innych koncepcji Spring Boot:
Wiosenny samouczek AOP
Samouczek rejestrowania Spring Boot
Scentralizowana konfiguracja w Spring Boot
Najczęściej używane adnotacje Hibernate