From 8d284e1690faba5c0f834a07bac81e1ee00d515f Mon Sep 17 00:00:00 2001 From: mavlushechka Date: Fri, 12 Nov 2021 21:31:54 +0500 Subject: Initializing --- .../service/CustomUserDetailsService.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 src/main/java/com/mavlushechka/studentdatabase/service/CustomUserDetailsService.java (limited to 'src/main/java/com/mavlushechka/studentdatabase/service') 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 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); + } +} -- cgit v1.2.3