package es.uv.garcosda.security; import java.util.Collection; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; 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 org.springframework.transaction.annotation.Transactional; import es.uv.garcosda.domain.User; import es.uv.garcosda.repositories.UserRepository; @Service @Transactional public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { User user = userRepository.findByUsername(userName) .orElseThrow(() -> new UsernameNotFoundException("User "+userName+" not found")); return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), getAuthorities(user)); } private static Collection getAuthorities(User user) { String[] userRoles = user.getRoles() .stream() .map((role) -> role.getName()) .toArray(String[]::new); Collection authorities = AuthorityUtils.createAuthorityList(userRoles); return authorities; } }