package com.mavlushechka.studentdatabase.service; import com.mavlushechka.studentdatabase.domain.Role; import com.mavlushechka.studentdatabase.domain.User; import com.mavlushechka.studentdatabase.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; 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.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.util.*; @Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; public void saveUser(User user) { user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); userRepository.save(user); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user != null) { List authorities = getUserAuthority(user.getRoles()); return buildUserForAuthentication(user, authorities); } else { throw new UsernameNotFoundException("Username not found"); } } private List getUserAuthority(Set userRoles) { Set roles = new HashSet<>(); userRoles.forEach((role) -> roles.add(new SimpleGrantedAuthority(role.getRole()))); return new ArrayList<>(roles); } private UserDetails buildUserForAuthentication(User user, List authorities) { return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities); } }