JwtUserDetailsService
Wed Feb 01 2023 03:39:08 GMT+0000 (Coordinated Universal Time)
Saved by @namnt
package Viettel.authen.service;
import java.util.ArrayList;
import java.util.List;
import Viettel.authen.entity.Role;
import Viettel.authen.entity.User;
import Viettel.authen.entity.UserGroup;
import Viettel.authen.repository.UserRepository;
import Viettel.authen.repository.RoleRepository;
import Viettel.authen.repository.UserGroupRespository;
import Viettel.authen.request.UserRequest;
import Viettel.authen.security.PasswordEncode;
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.stereotype.Service;
@Service
public class JwtUserDetailsService implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Autowired
UserGroupRespository userGroupRespository;
@Autowired
RoleRepository roleRepository;
@Autowired
PasswordEncode passwordEncode;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUserName(username);
if (user == null) {
System.out.println("User not found! " + username);
throw new UsernameNotFoundException("User " + username + " was not found in the database");
}
List<UserGroup> userGroup= userGroupRespository.findUserGroupsByUserId(user.getUserId());
List<String> roles= new ArrayList<>();
for(int i=0;i<userGroup.size();i++){
Role role= roleRepository.findRoleByRoleId(userGroup.get(i).getRoleId());
roles.add(role.getRoleName());
}
List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
if (roles != null) {
for (String role : roles) {
GrantedAuthority authority = new SimpleGrantedAuthority(role);
grantList.add(authority);
}
}
return new org.springframework.security.core.userdetails.User(user.getUserName(), user.getPassword(),
grantList);
}
public boolean saveNewAccount(UserRequest userRequest) {
if(!userRepository.existsByUserName(userRequest.getUsername())) {
User newUser = new User();
newUser.setUserName(userRequest.getUsername());
newUser.setPassword(passwordEncode.passwordEncoder().encode(userRequest.getPassword()));
userRepository.save(newUser);
int userId=userRepository.findByUserName(newUser.getUserName()).getUserId();
int roleId=roleRepository.findRoleByRoleName(userRequest.getRole()).getRoleId();
if(saveNewUserGroup(userId,roleId)){
return true;
}
return false;
}
return false;
}
public boolean saveNewUserGroup(int userID, int roleId) {
if(!userGroupRespository.existsByRoleId(roleId)) {
if(!userGroupRespository.existsByUserId(userID)) {
UserGroup newUserGroup = new UserGroup();
newUserGroup.setUserId(userID);
newUserGroup.setRoleId(roleId);
userGroupRespository.save(newUserGroup);
return true;
}
}
return false;
}
}



Comments