package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.github.pagehelper.util.StringUtil;
|
import com.whyc.dto.Response;
|
import com.whyc.mapper.UserInfMapper;
|
import com.whyc.pojo.UserInf;
|
import com.whyc.util.AESUtil;
|
import com.whyc.util.RSAUtil;
|
import org.apache.catalina.User;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.io.UnsupportedEncodingException;
|
import java.nio.charset.Charset;
|
import java.util.Arrays;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.regex.Pattern;
|
|
@Service
|
public class PasswordResetService {
|
|
@Resource
|
private UserInfMapper userInfMapper;
|
|
/*public Response<String> preCheck(String name) {
|
Response<String> response = new Response<>();
|
QueryWrapper<UserInf> queryWrapper = Wrappers.query();
|
queryWrapper.select("uSnId as SNId").eq("uName",name).last(" limit 1");
|
UserInf userInf = userInfMapper.selectOne(queryWrapper);
|
//解析密码
|
String password = parsePassword(userInf.getSNId());
|
response.setData(password);
|
response.setMsg(encryptType);
|
return response;
|
}*/
|
|
@Transactional
|
public void passwordReset(){
|
//uSnId 有两种情况,明文/AES加密/RSA
|
QueryWrapper<UserInf> queryWrapper = Wrappers.query();
|
queryWrapper.select("uId as id","uSnId as SNId");
|
List<UserInf> userInfList = userInfMapper.selectList(queryWrapper);
|
userInfList.stream().forEach(userInf->{
|
/*if(userInf.getId() == 0){
|
return;
|
}*/
|
//明文,需要判断获取
|
String password = parsePassword(userInf.getSNId());
|
password = password.trim();
|
//将明文RSA加密回写到uSnId和upassword
|
String passwordRSA = RSAUtil.encrypt(password, RSAUtil.getPublicKey());
|
userInf.setSNId(passwordRSA);
|
userInf.setPassword(passwordRSA);
|
//userInfMapper.updateById(userInf);
|
});
|
userInfMapper.updateBatch(userInfList);
|
}
|
|
private String parsePassword(String passwordData){
|
//明文,需要判断获取
|
String password;
|
password = AESUtil.desEncrypt(passwordData);
|
if(StringUtil.isEmpty(password) || !verifyPassword(password.trim())){
|
password = RSAUtil.decrypt(passwordData, RSAUtil.getPrivateKey());
|
if(StringUtil.isEmpty(password) || !verifyPassword(password.trim())){
|
password = passwordData;
|
}
|
}
|
return password.trim();
|
}
|
|
private boolean verifyPassword(String password) {
|
String pattern = "[0-9a-zA-Z!@#$%^&*()-_=+[{]}\\|;:'\",<.>]";
|
char[] chars = password.toCharArray();
|
for (int i = 0; i < chars.length; i++) {
|
char char1 = chars[i];
|
boolean matches = Pattern.matches(pattern, String.valueOf(char1));
|
if(!matches){
|
return false;
|
}
|
}
|
return true;
|
}
|
|
}
|