View Javadoc
1   package fr.tiogars.domaintemplate.domains.auth.services;
2   
3   import org.springframework.security.core.authority.SimpleGrantedAuthority;
4   import org.springframework.security.core.userdetails.UserDetails;
5   import org.springframework.security.core.userdetails.UserDetailsService;
6   import org.springframework.security.core.userdetails.UsernameNotFoundException;
7   import org.springframework.stereotype.Service;
8   
9   import fr.tiogars.domaintemplate.domains.auth.user.repositories.UserRepository;
10  
11  /** Loads persisted users for Spring Security authentication. */
12  @Service
13  public class TemplateUserDetailsService implements UserDetailsService {
14  
15      private final UserRepository repository;
16  
17      TemplateUserDetailsService(UserRepository repository) {
18          this.repository = repository;
19      }
20  
21      @Override
22      public UserDetails loadUserByUsername(String username) {
23          return repository.findByUsername(username)
24                  .map(user -> org.springframework.security.core.userdetails.User.builder()
25                          .username(user.getUsername())
26                          .password(user.getPasswordHash())
27                          .disabled(!user.isEnabled())
28                          .authorities(user.getRoles().stream()
29                                  .map(role -> new SimpleGrantedAuthority("ROLE_" + role.getCode()))
30                                  .toList())
31                          .build())
32                  .orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
33      }
34  }