125 lines
4.0 KiB
Java
125 lines
4.0 KiB
Java
package com.codesdream.ase.service;
|
|
|
|
import com.codesdream.ase.component.permission.ASEPasswordEncoder;
|
|
import com.codesdream.ase.component.permission.ASEUsernameEncoder;
|
|
import com.codesdream.ase.component.permission.UserRolesListGenerator;
|
|
import com.codesdream.ase.exception.UserInformationIllegalException;
|
|
import com.codesdream.ase.exception.UserNotFoundException;
|
|
import com.codesdream.ase.exception.UsernameAlreadyExistException;
|
|
import com.codesdream.ase.model.permission.User;
|
|
import com.codesdream.ase.repository.permission.UserRepository;
|
|
import javafx.util.Pair;
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import java.util.UUID;
|
|
|
|
@Service
|
|
public class UserService implements IUserService {
|
|
@Resource
|
|
UserRolesListGenerator userRolesListGenerator;
|
|
|
|
@Resource
|
|
UserRepository userRepository;
|
|
|
|
@Resource
|
|
ASEPasswordEncoder passwordEncoder;
|
|
|
|
@Resource
|
|
ASEUsernameEncoder usernameEncoder;
|
|
|
|
@Override
|
|
public List<User> findAll() {
|
|
return (List<User>) userRepository.findAll();
|
|
}
|
|
|
|
@Override
|
|
public Optional<User> findUserById(int id) {
|
|
return userRepository.findById(id);
|
|
}
|
|
|
|
@Override
|
|
public User findUserByUsername(String username) {
|
|
Optional<User> user = userRepository.findByUsername(username);
|
|
if(!user.isPresent()) throw new UsernameNotFoundException(username);
|
|
return user.get();
|
|
}
|
|
|
|
@Override
|
|
public Pair<Boolean, User> checkIfUserExists(String username){
|
|
Optional<User> user = userRepository.findByUsername(username);
|
|
return user.map(value -> new Pair<>(true, value)).orElseGet(() -> new Pair<>(false, null));
|
|
}
|
|
|
|
@Override
|
|
public Collection<? extends GrantedAuthority> getUserAuthorities(User user) {
|
|
return userRolesListGenerator.generateRoles(user);
|
|
}
|
|
|
|
@Override
|
|
public void updatePassword(User user, String password) {
|
|
user.setPassword(passwordEncoder.encode(password));
|
|
update(user);
|
|
}
|
|
|
|
@Override
|
|
public void generateRandomUsernameByStudentID(User user, String id) {
|
|
user.getUserAuth().setStudentID(id);
|
|
user.setUsername(usernameEncoder.encode(id));
|
|
}
|
|
|
|
@Override
|
|
public void generateRandomUsername(User user) {
|
|
user.setUsername(usernameEncoder.encode(UUID.randomUUID().toString()));
|
|
}
|
|
|
|
@Override
|
|
public User save(User user) {
|
|
// 查找用户名是否已经被注册
|
|
if(userRepository.findByUsername(user.getUsername()).isPresent())
|
|
throw new UsernameAlreadyExistException(user.getUsername());
|
|
|
|
// 用户信息一般性规范检查
|
|
if(user.getUserAuth().getUserAnswer().length() > 255
|
|
|| user.getUserAuth().getUserQuestion().length() > 255
|
|
|| user.getUserAuth().getStudentID().length() > 24
|
|
|| user.getUserAuth().getMail().length() > 64
|
|
|| user.getUserDetail().getRealName().length() > 64)
|
|
throw new UserInformationIllegalException(user.getUsername());
|
|
|
|
// 强制以哈希值(sha256)保存密码
|
|
user.setPassword(passwordEncoder.encode(user.getPassword()));
|
|
return userRepository.save(user);
|
|
}
|
|
|
|
@Override
|
|
public User update(User user) {
|
|
// 执行前检查
|
|
if(!userRepository.findById(user.getId()).isPresent())
|
|
throw new UserNotFoundException(user.getId(), user.getUsername());
|
|
return userRepository.save(user);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void delete(User user) {
|
|
// 执行前检查
|
|
if(!userRepository.findById(user.getId()).isPresent())
|
|
throw new UserNotFoundException(user.getId(), user.getUsername());
|
|
userRepository.delete(user);
|
|
}
|
|
|
|
// 获得一个默认初始化的用户对象
|
|
@Override
|
|
public User getDefaultUser() {
|
|
return new User();
|
|
}
|
|
|
|
|
|
}
|