TemplateUserDetailsService.java
package fr.tiogars.domaintemplate.domains.auth.services;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import fr.tiogars.domaintemplate.domains.auth.user.repositories.UserRepository;
/** Loads persisted users for Spring Security authentication. */
@Service
public class TemplateUserDetailsService implements UserDetailsService {
private final UserRepository repository;
TemplateUserDetailsService(UserRepository repository) {
this.repository = repository;
}
@Override
public UserDetails loadUserByUsername(String username) {
return repository.findByUsername(username)
.map(user -> org.springframework.security.core.userdetails.User.builder()
.username(user.getUsername())
.password(user.getPasswordHash())
.disabled(!user.isEnabled())
.authorities(user.getRoles().stream()
.map(role -> new SimpleGrantedAuthority("ROLE_" + role.getCode()))
.toList())
.build())
.orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
}
}