UserDetailsService și UserDetails în Spring Boot

security Spring Boot 3.x / Spring Security 6 Q&A / Distribuie cod

Încărcarea conturilor de utilizatori, a parolelor hășuite și a rolurilor de securitate din baza de date pentru procesul de autentificare.

Sintaxă
public UserDetails loadUserByUsername(String username)

Interfața centrală prin care Spring Security accesează datele de identificare ale utilizatorilor este UserDetailsService. Aceasta definește o singură metodă:

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;

Implementarea acestei interfețe permite citirea utilizatorului din baza de date prin Spring Data JPA și convertirea lui într-un obiect conform cu interfața UserDetails (care oferă username-ul, parola hășuită, rolurile GrantedAuthority și starea contului: activ, neblocat, neexpirat).

Exemplu: Implementare custom UserDetailsService conectată la JPA
package ro.dexblog.demo.security;

import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.*;
import org.springframework.stereotype.Service;
import ro.dexblog.demo.repository.UserRepository;
import java.util.stream.Collectors;

@Service
public class CustomUserDetailsService implements UserDetailsService {

    private final UserRepository userRepository;

    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        var user = userRepository.findByEmail(email)
            .orElseThrow(() -> new UsernameNotFoundException("Utilizatorul nu există: " + email));

        var authorities = user.getRoles().stream()
            .map(role -> new SimpleGrantedAuthority(role.getName()))
            .collect(Collectors.toList());

        return new org.springframework.security.core.userdetails.User(
            user.getEmail(),
            user.getPasswordHash(),
            authorities
        );
    }
}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: UserDetailsService și UserDetails

Ai o nelămurire despre utilizarea comenzii UserDetailsService și UserDetails sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.