From 89a72db182bc4312caf4abfa60969c325cbb98bb Mon Sep 17 00:00:00 2001 From: huangzhen <867217663@qq.com> Date: 星期日, 04 二月 2024 10:29:05 +0800 Subject: [PATCH] bug修复 --- src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java | 31 +++++++ src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java | 9 + src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java | 49 +++++++++--- src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java | 127 +++++++++++++++---------------- src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java | 2 src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java | 4 src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java | 2 src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java | 4 8 files changed, 143 insertions(+), 85 deletions(-) diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java index be9a045..ae2ada3 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java @@ -30,12 +30,14 @@ import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserDomainService; import com.gkhy.fourierSpecialGasMonitor.domain.account.model.dto.UserInfoDomainDTO; import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserRoleDomainService; +import com.gkhy.fourierSpecialGasMonitor.utils.PasswordCheckUtil; import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; @@ -289,9 +291,12 @@ CreateUserBO createUserBO = new CreateUserBO(); createUserBO.setName(createNewUserAppReqDTO.getName()); createUserBO.setRealName(createNewUserAppReqDTO.getRealName()); - //如果没有提供密码,初始密码为“123456” + //如果没有提供密码,初始密码为“Gkhy@c413” if(createNewUserAppReqDTO.getPwd() == null || createNewUserAppReqDTO.getPwd().isEmpty()){ - createNewUserAppReqDTO.setPwd("123456"); + createNewUserAppReqDTO.setPwd("Gkhy@c413"); + } + if (!StringUtils.isEmpty(createNewUserAppReqDTO.getPwd())){ + PasswordCheckUtil.passwordIsValid(createNewUserAppReqDTO.getPwd()); } createUserBO.setPwd(createNewUserAppReqDTO.getPwd()); createUserBO.setPhone(createNewUserAppReqDTO.getPhone()); diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java index 883a378..a29057e 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java @@ -50,8 +50,8 @@ @PostMapping("/upload/gasFlux") public ForeignResult uploadGasFlux(@RequestBody UploadGasFluxReqDTO reqDto){ - UploadGasFluxReqDTO uploadGasFluxReqDTO = reqDto.expansionFactor(); - ForeignResult result = dataReceiveService.uploadGasFlux(uploadGasFluxReqDTO); + //UploadGasFluxReqDTO uploadGasFluxReqDTO = reqDto.expansionFactor(); + ForeignResult result = dataReceiveService.uploadGasFlux(reqDto); return result; } diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java index 23ff624..283d527 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java @@ -7,6 +7,7 @@ import com.gkhy.fourierSpecialGasMonitor.commons.domain.SearchResult; import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode; import com.gkhy.fourierSpecialGasMonitor.commons.enums.SystemCacheKeyEnum; +import com.gkhy.fourierSpecialGasMonitor.commons.enums.UserRoleEnum; import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException; import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery; import com.gkhy.fourierSpecialGasMonitor.commons.utils.BeanCopyUtils; @@ -25,6 +26,8 @@ import com.gkhy.fourierSpecialGasMonitor.domain.account.service.SysDepartmentDomainService; import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserDomainService; import com.gkhy.fourierSpecialGasMonitor.domain.account.model.dto.UserInfoDomainDTO; +import com.gkhy.fourierSpecialGasMonitor.utils.PasswordCheckUtil; +import com.gkhy.fourierSpecialGasMonitor.utils.ThreadLocalUtil; import com.google.common.collect.Range; import com.google.common.hash.Hashing; import org.redisson.api.RMapCache; @@ -67,6 +70,14 @@ @Autowired private SysDepartmentDomainService departmentDomainService; + + private User getCurrentUser(){ + Long userId = ThreadLocalUtil.get().getId(); + User user = userRepository.findUserByIdAndStatus(userId, UserStatusEnum.STATUS_ACTIVE.getStatus()); + if (user == null) + throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"未成功获取用户信息"); + return user; + } @Override @Transactional @@ -291,22 +302,37 @@ @Override @Transactional public boolean updateUserPwd(Long uid, String oldPwd, String newPwd) { - if(uid == null || oldPwd == null || newPwd == null || oldPwd.isEmpty() || newPwd.isEmpty()) + User currentUser = getCurrentUser(); + Boolean flag = false; + for (SysUserRoleBind sysUserRoleBind : currentUser.getSysUserRoleBinds()) { + if ("超级管理员".equals(sysUserRoleBind.getRole().getName())){ + flag = true; + } + } + if(uid == null || oldPwd == null || newPwd == null || newPwd.isEmpty()) throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); Optional<User> userOptional = userRepository.findById(uid); if(!userOptional.isPresent()){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_ACCOUNT_NOT_EXIST.getCode(), "用户不存在"); } User user = userOptional.get(); - //验证旧密码 - String hash = String.valueOf(Hashing.hmacMd5(user.getSalt().getBytes(StandardCharsets.UTF_8)).hashString(oldPwd, - StandardCharsets.UTF_8)); - if(!hash.equals(user.getHash())) - throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "旧密码错误"); - String newSalt = String.valueOf(Hashing.hmacMd5("".getBytes()).hashString(""+uid+Range.atLeast(1)+System.nanoTime(), - StandardCharsets.UTF_8)); - String newHash = String.valueOf(Hashing.hmacMd5(newSalt.getBytes(StandardCharsets.UTF_8)).hashString(newPwd, - StandardCharsets.UTF_8)); + PasswordCheckUtil.passwordIsValid(newPwd.trim()); + if (!flag){ + if(oldPwd.isEmpty()) { + throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); + } + //验证旧密码 + String hash = String.valueOf(Hashing.hmacMd5(user.getSalt().getBytes(StandardCharsets.UTF_8)).hashString(oldPwd, + StandardCharsets.UTF_8)); + if(!hash.equals(user.getHash())) + throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "旧密码错误"); + } + String newSalt = genPasswordSalt(); + String newHash = genPasswordHash(newPwd, newSalt); + //String newSalt = String.valueOf(Hashing.hmacMd5("".getBytes()).hashString(""+uid+Range.atLeast(1)+System.nanoTime(), + // StandardCharsets.UTF_8)); + //String newHash = String.valueOf(Hashing.hmacMd5(newSalt.getBytes(StandardCharsets.UTF_8)).hashString(newPwd, + // StandardCharsets.UTF_8)); if(userRepository.updatePassword(uid,newHash,newSalt, LocalDateTime.now()) == 1){ // deleteUserCache(uid); return true; @@ -641,7 +667,4 @@ String hash = Hashing.hmacMd5(salt.getBytes(StandardCharsets.UTF_8)).hashBytes(password.getBytes(StandardCharsets.UTF_8)).toString(); return hash; } - - - } diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java index ad3afe8..7c5ff4e 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java @@ -63,68 +63,67 @@ private Double gasValue19; private int gasName20; private Double gasValue20; - - public UploadGasFluxReqDTO expansionFactor(){ - if (gasValue01 != null) { - gasValue01 = Math.round(gasValue01 * 3600 * 100.0) / 100.0; - } - if (gasValue02 != null) { - gasValue02 = Math.round(gasValue02 * 3600 * 100.0) / 100.0; - } - if (gasValue03 != null) { - gasValue03 = Math.round(gasValue03 * 3.6 * 100.0) / 100.0; - } - if (gasValue04 != null) { - gasValue04 = Math.round(gasValue04 * 3600 * 100.0) / 100.0; - } - if (gasValue05 != null) { - gasValue05 = Math.round(gasValue05 * 3600 * 100.0) / 100.0; - } - if (gasValue06 != null) { - gasValue06 = Math.round(gasValue06 * 3600 * 100.0) / 100.0; - } - if (gasValue07 != null) { - gasValue07 = Math.round(gasValue07 * 3600 * 100.0) / 100.0; - } - if (gasValue08 != null) { - gasValue08 = Math.round(gasValue08 * 3600 * 100.0) / 100.0; - } - if (gasValue09 != null) { - gasValue09 = Math.round(gasValue09 * 3600 * 100.0) / 100.0; - } - if (gasValue10 != null) { - gasValue10 = Math.round(gasValue10 * 3600 * 100.0) / 100.0; - } - if (gasValue11 != null) { - gasValue11 = Math.round(gasValue11 * 3600 * 100.0) / 100.0; - } - if (gasValue12 != null) { - gasValue12 = Math.round(gasValue12 * 3600 * 100.0) / 100.0; - } - if (gasValue13 != null) { - gasValue13 = Math.round(gasValue13 * 3600 * 100.0) / 100.0; - } - if (gasValue14 != null) { - gasValue14 = Math.round(gasValue14 * 3600 * 100.0) / 100.0; - } - if (gasValue15 != null) { - gasValue15 = Math.round(gasValue15 * 3600 * 100.0) / 100.0; - } - if (gasValue16 != null) { - gasValue16 = Math.round(gasValue16 * 3600 * 100.0) / 100.0; - } - if (gasValue17 != null) { - gasValue17 = Math.round(gasValue17 * 3600 * 100.0) / 100.0; - } - if (gasValue18 != null) { - gasValue18 = Math.round(gasValue18 * 3600 * 100.0) / 100.0; - } - if (gasValue19 != null) { - gasValue19 = Math.round(gasValue19 * 3600 * 100.0) / 100.0; - } - if (gasValue20 != null) { - gasValue20 = Math.round(gasValue20 * 3600 * 100.0) / 100.0; - } - return this; - } + //public UploadGasFluxReqDTO expansionFactor(){ + // if (gasValue01 != null) { + // gasValue01 = Math.round(gasValue01 * 3600 * 100.0) / 100.0; + // } + // if (gasValue02 != null) { + // gasValue02 = Math.round(gasValue02 * 3600 * 100.0) / 100.0; + // } + // if (gasValue03 != null) { + // gasValue03 = Math.round(gasValue03 * 3.6 * 100.0) / 100.0; + // } + // if (gasValue04 != null) { + // gasValue04 = Math.round(gasValue04 * 3600 * 100.0) / 100.0; + // } + // if (gasValue05 != null) { + // gasValue05 = Math.round(gasValue05 * 3600 * 100.0) / 100.0; + // } + // if (gasValue06 != null) { + // gasValue06 = Math.round(gasValue06 * 3600 * 100.0) / 100.0; + // } + // if (gasValue07 != null) { + // gasValue07 = Math.round(gasValue07 * 3600 * 100.0) / 100.0; + // } + // if (gasValue08 != null) { + // gasValue08 = Math.round(gasValue08 * 3600 * 100.0) / 100.0; + // } + // if (gasValue09 != null) { + // gasValue09 = Math.round(gasValue09 * 3600 * 100.0) / 100.0; + // } + // if (gasValue10 != null) { + // gasValue10 = Math.round(gasValue10 * 3600 * 100.0) / 100.0; + // } + // if (gasValue11 != null) { + // gasValue11 = Math.round(gasValue11 * 3600 * 100.0) / 100.0; + // } + // if (gasValue12 != null) { + // gasValue12 = Math.round(gasValue12 * 3600 * 100.0) / 100.0; + // } + // if (gasValue13 != null) { + // gasValue13 = Math.round(gasValue13 * 3600 * 100.0) / 100.0; + // } + // if (gasValue14 != null) { + // gasValue14 = Math.round(gasValue14 * 3600 * 100.0) / 100.0; + // } + // if (gasValue15 != null) { + // gasValue15 = Math.round(gasValue15 * 3600 * 100.0) / 100.0; + // } + // if (gasValue16 != null) { + // gasValue16 = Math.round(gasValue16 * 3600 * 100.0) / 100.0; + // } + // if (gasValue17 != null) { + // gasValue17 = Math.round(gasValue17 * 3600 * 100.0) / 100.0; + // } + // if (gasValue18 != null) { + // gasValue18 = Math.round(gasValue18 * 3600 * 100.0) / 100.0; + // } + // if (gasValue19 != null) { + // gasValue19 = Math.round(gasValue19 * 3600 * 100.0) / 100.0; + // } + // if (gasValue20 != null) { + // gasValue20 = Math.round(gasValue20 * 3600 * 100.0) / 100.0; + // } + // return this; + //} } diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java index f031625..10f1c55 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java @@ -7,7 +7,7 @@ */ public enum HeartbeatExecEnum { - GAS_CONCENTRATION((byte)1,"【气体浓度】实时推送心跳监测异常 ---> 1分钟内未收到远端数据"), + GAS_CONCENTRATION((byte)1,"【气体浓度】实时推送心跳监测异常 ---> 5分钟内未收到远端数据"), GAS_FLUX((byte)2,"【气体通量】实时推送心跳监测异常 ---> 30分钟内未收到远端数据"), ; diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java index f0c9d01..5fe51a5 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java @@ -50,12 +50,12 @@ - @Scheduled(cron = "0 0/1 * * * ?") + @Scheduled(cron = "0 0/5 * * * ?") @Async(value = "SocketTaskExecutor") public void gasConcentrationStatus() { GasConcentration gasConcentration = gasConcentrationService.getLastData(); if (gasConcentration != null){ - LocalDateTime lastReceiveTime = gasConcentration.getDataReceivingTime().plusMinutes(2); + LocalDateTime lastReceiveTime = gasConcentration.getDataReceivingTime().plusMinutes(5); if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){ try { heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_CONCENTRATION.getStatus()+"",null); diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java index dd91e79..872d073 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java @@ -76,7 +76,7 @@ } @Override - public Result createGasCategory(CreateGasCategoryReqDTO reqDto) { + public synchronized Result createGasCategory(CreateGasCategoryReqDTO reqDto) { if (reqDto == null) throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"参数不能为空"); if (StringUtils.isBlank(reqDto.getMolecularFormula())) diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java new file mode 100644 index 0000000..5703a81 --- /dev/null +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java @@ -0,0 +1,31 @@ +package com.gkhy.fourierSpecialGasMonitor.utils; + +import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode; +import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException; + +/** + * @author Mr.huang + * @decription + * @date 2024/1/4 10:44 + */ +public class PasswordCheckUtil { + + public static void passwordIsValid(String pwd){ + if (pwd.length() < 8){ + throw new BusinessException(PasswordCheckUtil.class, ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码长度不够"); + } + if (!pwd.matches(".*[A-Z].*")){ + throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符"); + } + if (!pwd.matches(".*[a-z].*")){ + throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符"); + } + if (!pwd.matches(".*\\d.*")){ + throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符"); + } + if (!pwd.matches(".*[!@#$%^&*.()?+`~<>,-].*")){ + throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符"); + } + } + +} \ No newline at end of file -- Gitblit v1.9.2