diff options
Diffstat (limited to 'src/main/java/com/mavlushechka/studentdatabase/service')
-rwxr-xr-x | src/main/java/com/mavlushechka/studentdatabase/service/CustomUserDetailsService.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/com/mavlushechka/studentdatabase/service/CustomUserDetailsService.java b/src/main/java/com/mavlushechka/studentdatabase/service/CustomUserDetailsService.java new file mode 100755 index 0000000..b238c98 --- /dev/null +++ b/src/main/java/com/mavlushechka/studentdatabase/service/CustomUserDetailsService.java @@ -0,0 +1,50 @@ +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<GrantedAuthority> authorities = getUserAuthority(user.getRoles()); + return buildUserForAuthentication(user, authorities); + } else { + throw new UsernameNotFoundException("Username not found"); + } + } + + private List<GrantedAuthority> getUserAuthority(Set<Role> userRoles) { + Set<GrantedAuthority> roles = new HashSet<>(); + userRoles.forEach((role) -> roles.add(new SimpleGrantedAuthority(role.getRole()))); + return new ArrayList<>(roles); + } + + private UserDetails buildUserForAuthentication(User user, List<GrantedAuthority> authorities) { + return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities); + } +} |