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
);
}
}
Întrebări & Exemple de Cod:
UserDetailsService și UserDetailsAi o nelămurire despre utilizarea comenzii
UserDetailsService și UserDetailssau 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.