|
@@ -27,7 +27,6 @@ import cn.hutool.captcha.CaptchaUtil;
|
|
|
import cn.hutool.captcha.CircleCaptcha;
|
|
|
import cn.hutool.core.img.ImgUtil;
|
|
|
import cn.hutool.core.lang.UUID;
|
|
|
-import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.crypto.SecureUtil;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
@@ -353,11 +352,13 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
}
|
|
|
|
|
|
//校验登录时参数
|
|
|
- public EncryptionLoginVO loginCommonMethod(LoginCommonDTO vo, Personnel personnel) throws Exception {
|
|
|
+ public EncryptionLoginVO loginCommonMethod(LoginCommonDTO vo, Personnel personnel,LoginRecordVO loginRecordVO) throws Exception {
|
|
|
Integer personnelId = personnel.getId();
|
|
|
List<AssoPersonVipType> personVipTypes = assoPersonVipTypeMapper.selectList(new LambdaQueryWrapper<AssoPersonVipType>()
|
|
|
.eq(AssoPersonVipType::getPersonId, personnelId));
|
|
|
if (org.springframework.util.CollectionUtils.isEmpty(personVipTypes)) {
|
|
|
+ loginRecordVO.setLoginResult("无权限");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.PERMISSION_ERROR);
|
|
|
}
|
|
|
Long timeMillis = vo.getCurrentTimeMillis();
|
|
@@ -368,27 +369,35 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
long currentTimeSecond = System.currentTimeMillis() / 1000;
|
|
|
final long second = currentTimeSecond - currentTimeMillis;
|
|
|
if (second > 30) {
|
|
|
+ loginRecordVO.setLoginResult("请求时间超时");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_REQUEST_TIME_OVERTIME);
|
|
|
}
|
|
|
String appSecret = appKey + currentTimeMillis;
|
|
|
String md5Sign = SecureUtil.md5(appSecret);
|
|
|
if (Boolean.TRUE.equals(StringUtils.isEmpty(sign)) || !sign.equals(md5Sign)) {
|
|
|
+ loginRecordVO.setLoginResult("请求SIGN不一致,重新检查");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_SIGN_IS_NOT_SAME);
|
|
|
}
|
|
|
if (Boolean.TRUE.equals(StringUtils.isEmpty(machineCode))) {
|
|
|
+ loginRecordVO.setLoginResult("机器码不可为空");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_MACHINE_CODE_IS_NULL);
|
|
|
}
|
|
|
|
|
|
- //人员信息中私钥或公钥为空则添加进去
|
|
|
- this.updatePersonnel(personnel.getPrivateKey(), personnel.getPublicKey(), personnel.getSymmetryKey(), personnelId);
|
|
|
-
|
|
|
- personnel = personnelMapper.selectById(personnel.getId());
|
|
|
List<AssoPersonnelMachine> machineList = assoPersonnelMachineMapper.selectList(new LambdaQueryWrapper<AssoPersonnelMachine>()
|
|
|
.eq(AssoPersonnelMachine::getPersonnelId, personnelId)
|
|
|
.ne(AssoPersonnelMachine::getMachineCode, SecureUtil.md5(machineCode)));
|
|
|
if (machineList.size() > 1) {
|
|
|
+ loginRecordVO.setLoginResult("同一账号新机登录不可超过两个");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT);
|
|
|
}
|
|
|
+ //人员信息中私钥或公钥为空则添加进去
|
|
|
+ this.updatePersonnel(personnel.getPrivateKey(), personnel.getPublicKey(), personnel.getSymmetryKey(), personnelId);
|
|
|
+ personnel = personnelMapper.selectById(personnel.getId());
|
|
|
+ //添加人员和机器关联
|
|
|
this.addOrUpdatePersonnelMachine(machineCode, personnel);
|
|
|
|
|
|
EncryptionLoginVO loginVO = new EncryptionLoginVO();
|
|
@@ -404,9 +413,29 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
loginVO.setToken(StpUtil.getTokenValue());
|
|
|
PersonVipMessVO personVipMessVO = assoPersonVipTypeService.getPersonVipMessage(personnelId);
|
|
|
loginVO.setPersonVipMessVO(personVipMessVO);
|
|
|
+ loginRecordVO.setLoginResult("成功");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
return loginVO;
|
|
|
}
|
|
|
|
|
|
+ public void addLoginRecord(Personnel personnel,LoginRecordVO loginRecordVO) {
|
|
|
+ loginRecordVO.setLoginSystem(3);
|
|
|
+ loginRecordVO.setPersonnelId(personnel.getId());
|
|
|
+ loginRecordVO.setTenantId(personnel.getTenantId());
|
|
|
+ //登录日志记录ip地址
|
|
|
+ loginRecordVO.setLoginIp(request.getRemoteAddr());
|
|
|
+ String ua = request.getHeader("User-Agent");
|
|
|
+ UserAgent userAgent = UserAgent.parseUserAgentString(ua);
|
|
|
+ //获取客户端操作系统
|
|
|
+ String os = userAgent.getOperatingSystem().getName();
|
|
|
+ //获取客户端浏览器
|
|
|
+ String browser = userAgent.getBrowser().getName();
|
|
|
+ //登录日志记录操作系统
|
|
|
+ loginRecordVO.setLoginOs(os);
|
|
|
+ //解析浏览器
|
|
|
+ loginRecordVO.setBrowser(browser);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 登录加密
|
|
|
*
|
|
@@ -414,7 +443,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
+// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
public String loginByEncryption(EncryptionLoginDTO vo) throws Exception {
|
|
|
final String username = vo.getUsername();
|
|
|
final String password = vo.getPassword();
|
|
@@ -431,12 +460,18 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
if (ObjectUtils.isEmpty(personnel)) {
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_NOT_EXIST);
|
|
|
}
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
+ this.addLoginRecord(personnel, loginRecordVO);
|
|
|
if (personnel.getPersonnelStatus().equals(0)) {
|
|
|
+ loginRecordVO.setLoginResult("该用户不可用");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_FORBIDDEN);
|
|
|
}
|
|
|
//校验密码是否正确
|
|
|
boolean isPassword = personnel.getPersonnelPassword().equals(SecureUtil.md5(password));
|
|
|
if (!isPassword) {
|
|
|
+ loginRecordVO.setLoginResult("密码错误");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
//登录日志记录登录是否成功
|
|
|
throw new XiaoShiException(ExceptionEnum.LOGIN_PASSWORD_MISTAKE);
|
|
|
}
|
|
@@ -445,10 +480,11 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
commonDTO.setSign(vo.getSign());
|
|
|
commonDTO.setCurrentTimeMillis(vo.getCurrentTimeMillis());
|
|
|
commonDTO.setMachineCode(vo.getMachineCode());
|
|
|
- EncryptionLoginVO loginVO = this.loginCommonMethod(commonDTO, personnel);
|
|
|
+ EncryptionLoginVO loginVO = this.loginCommonMethod(commonDTO, personnel,loginRecordVO);
|
|
|
return Response.success(loginVO);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
public void updatePersonnel(String privateKey, String publicKey, String symmetryKey, Integer personId) throws Exception {
|
|
|
if (StringUtils.isEmpty(privateKey) || StringUtils.isEmpty(publicKey) || Boolean.TRUE.equals(StringUtils.isEmpty(symmetryKey))) {
|
|
|
Map<String, String> map = RSAUtils.generateKey();
|
|
@@ -468,9 +504,9 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
*
|
|
|
* @param machineCode
|
|
|
* @param personnel
|
|
|
- * @return
|
|
|
*/
|
|
|
- private boolean addOrUpdatePersonnelMachine(String machineCode, Personnel personnel) {
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
+ public void addOrUpdatePersonnelMachine(String machineCode, Personnel personnel) {
|
|
|
AssoPersonnelMachine machine = assoPersonnelMachineMapper.selectOne(new LambdaQueryWrapper<AssoPersonnelMachine>()
|
|
|
.eq(AssoPersonnelMachine::getMachineCode, SecureUtil.md5(machineCode))
|
|
|
.eq(AssoPersonnelMachine::getPersonnelId, personnel.getId()));
|
|
@@ -482,12 +518,10 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
assoPersonnelMachine.setCreateUser(personnel.getCreateUser());
|
|
|
assoPersonnelMachine.setCreateTime(new Date());
|
|
|
assoPersonnelMachine.insert();
|
|
|
- return true;
|
|
|
} else {
|
|
|
machine.setId(machine.getId());
|
|
|
machine.setIfFirstActivation(false);
|
|
|
machine.updateById();
|
|
|
- return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -634,7 +668,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
* @param dto
|
|
|
* @return
|
|
|
*/
|
|
|
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
+// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
|
|
|
public String loginByPhone(PhoneLoginDTO dto) throws Exception {
|
|
|
//获取缓存中验证码
|
|
|
String code = redisUtil.get(LoginCacheKeyUtil.getLoginCaptcha(dto.getPhoneNum()));
|
|
@@ -660,7 +694,11 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
if (org.apache.commons.lang3.ObjectUtils.isEmpty(person)) {
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_NOT_EXIST);
|
|
|
}
|
|
|
+ LoginRecordVO loginRecordVO = new LoginRecordVO();
|
|
|
+ this.addLoginRecord(person, loginRecordVO);
|
|
|
if (person.getPersonnelStatus().equals(0)) {
|
|
|
+ loginRecordVO.setLoginResult("该用户不可用");
|
|
|
+ loginRecordService.addLoginRecord(loginRecordVO);
|
|
|
throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_FORBIDDEN);
|
|
|
}
|
|
|
LoginCommonDTO commonDTO = new LoginCommonDTO();
|
|
@@ -668,7 +706,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
|
|
|
commonDTO.setSign(dto.getSign());
|
|
|
commonDTO.setCurrentTimeMillis(dto.getCurrentTimeMillis());
|
|
|
commonDTO.setMachineCode(dto.getMachineCode());
|
|
|
- EncryptionLoginVO loginVO = this.loginCommonMethod(commonDTO, person);
|
|
|
+ EncryptionLoginVO loginVO = this.loginCommonMethod(commonDTO, person, loginRecordVO);
|
|
|
return Response.success(loginVO);
|
|
|
}
|
|
|
|