JwtUserDetailsService

PHOTO EMBED

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;
    }
}
content_copyCOPY