Implementacja uwierzytelniania i autoryzacji opartej na rolach zabezpieczeń Spring za pomocą Spring Boot 3.0

May 08 2023
Witajcie, tutaj dowiemy się o wiosennej implementacji zabezpieczeń za pomocą Spring Boot. Bezpieczeństwo Spring zapewnia uwierzytelnianie, autoryzację i ochronę przed typowymi atakami.

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

@PreAuthorizeadnotacja 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_USERrolą, podczas gdy getProductById()metoda może być wykonywana przez użytkowników z ROLE_ADMINrolą.

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

Ważne wzorce projektowe mikrousług dla wywiadów