package com.alterdekim.game.service; import com.alterdekim.game.entity.Role; import com.alterdekim.game.entity.User; import com.alterdekim.game.repository.UserRepository; import org.springframework.security.core.GrantedAuthority; 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 java.util.Collection; 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 { User user = userRepository.findByUsername(email); if (user != null) { return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), mapRolesToAuthorities(user.getRoles())); }else{ throw new UsernameNotFoundException("Invalid username or password."); } } private Collection< ? extends GrantedAuthority> mapRolesToAuthorities(Collection roles) { return roles.stream() .map(role -> new SimpleGrantedAuthority(role.getName().name())) .collect(Collectors.toList()); } }