App用户密码调整
This commit is contained in:
@@ -17,6 +17,12 @@ public interface PatternRegex {
|
|||||||
*/
|
*/
|
||||||
String PASSWORD_REGEX = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[\\=\\[\\]\\{\\}\\.\\,\\。\\、\\@\\#\\_\\!\\$\\%\\^\\&\\*\\(\\)\\?\\<\\>\\/\\|\\~,\\-\\+]).{8,16}$";
|
String PASSWORD_REGEX = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[\\=\\[\\]\\{\\}\\.\\,\\。\\、\\@\\#\\_\\!\\$\\%\\^\\&\\*\\(\\)\\?\\<\\>\\/\\|\\~,\\-\\+]).{8,16}$";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APP密码,长度为8-16
|
||||||
|
*/
|
||||||
|
String APP_PASSWORD_REGEX = "{8,16}$";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手机的密码
|
* 手机的密码
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ public interface BusinessTopic {
|
|||||||
*/
|
*/
|
||||||
String NJCN_APP_EVENT_TOPIC = "njcnAppEventTopic";
|
String NJCN_APP_EVENT_TOPIC = "njcnAppEventTopic";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 治理告警接收主题
|
||||||
|
*/
|
||||||
|
String NJCN_APP_WARN_TOPIC = "njcnAppWarnTopic";
|
||||||
|
|
||||||
|
|
||||||
interface AppDataTag {
|
interface AppDataTag {
|
||||||
|
|
||||||
@@ -31,5 +36,21 @@ public interface BusinessTopic {
|
|||||||
String RT_TAG = "rt";
|
String RT_TAG = "rt";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface AppEventTag {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 暂态事件(录波)tag
|
||||||
|
*/
|
||||||
|
String EVENT_TAG = "event";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AppWarnTag {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 告警事件tag
|
||||||
|
*/
|
||||||
|
String WARN_TAG = "warn";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package com.njcn.mq.message;
|
||||||
|
|
||||||
|
import com.njcn.middle.rocket.domain.BaseMessage;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类的介绍:
|
||||||
|
*
|
||||||
|
* @author xuyang
|
||||||
|
* @version 1.0.0
|
||||||
|
* @createTime 2023/8/22 11:06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AppEventMessage extends BaseMessage {
|
||||||
|
|
||||||
|
@ApiModelProperty("网络设备码")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private Integer mid;
|
||||||
|
|
||||||
|
@ApiModelProperty("逻辑设备 治理逻辑设备为1 电能质量设备为2")
|
||||||
|
private Integer did;
|
||||||
|
|
||||||
|
private Integer pri;
|
||||||
|
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
private Msg msg;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Msg{
|
||||||
|
|
||||||
|
@ApiModelProperty("逻辑子设备 治理逻辑设备为0 电能质量设备为1、2")
|
||||||
|
private Integer clDid;
|
||||||
|
|
||||||
|
private Integer dataType;
|
||||||
|
|
||||||
|
@ApiModelProperty("数据属性:无-0、实时-1、统计-2")
|
||||||
|
private Integer dataAttr;
|
||||||
|
|
||||||
|
private Integer dsNameIdx;
|
||||||
|
|
||||||
|
private List<DataArray> dataArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class DataArray{
|
||||||
|
|
||||||
|
private Integer idx;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Long dataTimeSec;
|
||||||
|
|
||||||
|
private Long dataTimeUSec;
|
||||||
|
|
||||||
|
@ApiModelProperty("事件类型")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private List<Param> param;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Param{
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private String unit;
|
||||||
|
|
||||||
|
private Object data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.njcn.mq.template;
|
||||||
|
|
||||||
|
import com.njcn.middle.rocket.template.RocketMQEnhanceTemplate;
|
||||||
|
import com.njcn.mq.constant.BusinessResource;
|
||||||
|
import com.njcn.mq.constant.BusinessTopic;
|
||||||
|
import com.njcn.mq.message.AppEventMessage;
|
||||||
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类的介绍:
|
||||||
|
*
|
||||||
|
* @author xuyang
|
||||||
|
* @version 1.0.0
|
||||||
|
* @createTime 2023/8/11 15:28
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class AppEventMessageTemplate extends RocketMQEnhanceTemplate {
|
||||||
|
|
||||||
|
public AppEventMessageTemplate(RocketMQTemplate template) {
|
||||||
|
super(template);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendResult sendMember(AppEventMessage appEventMessage) {
|
||||||
|
appEventMessage.setSource(BusinessResource.APP_RESOURCE);
|
||||||
|
return send(BusinessTopic.NJCN_APP_EVENT_TOPIC, BusinessTopic.AppEventTag.EVENT_TAG, appEventMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import com.njcn.system.pojo.dto.EpdDTO;
|
|||||||
import com.njcn.system.pojo.param.EleEpdPqdParam;
|
import com.njcn.system.pojo.param.EleEpdPqdParam;
|
||||||
import com.njcn.system.pojo.po.EleEpdPqd;
|
import com.njcn.system.pojo.po.EleEpdPqd;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
@@ -48,4 +49,7 @@ public interface EpdFeignClient {
|
|||||||
|
|
||||||
@PostMapping("/findAll")
|
@PostMapping("/findAll")
|
||||||
HttpResult<List<EpdDTO>> findAll();
|
HttpResult<List<EpdDTO>> findAll();
|
||||||
|
|
||||||
|
@PostMapping("/findByName")
|
||||||
|
HttpResult<EleEpdPqd> findByName(@RequestParam("name") String name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@ public class EpdFeignClientFallbackFactory implements FallbackFactory<EpdFeignCl
|
|||||||
log.error("{}异常,降级处理,异常为:{}","查询所有字典数据",cause.toString());
|
log.error("{}异常,降级处理,异常为:{}","查询所有字典数据",cause.toString());
|
||||||
throw new BusinessException(finalExceptionEnum);
|
throw new BusinessException(finalExceptionEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HttpResult<EleEpdPqd> findByName(String name) {
|
||||||
|
log.error("{}异常,降级处理,异常为:{}","根据名称查询字典信息",cause.toString());
|
||||||
|
throw new BusinessException(finalExceptionEnum);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,12 +196,23 @@ public class EleEpdPqdController extends BaseController {
|
|||||||
@PostMapping("/findAll")
|
@PostMapping("/findAll")
|
||||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
@ApiOperation("查询所有字典数据")
|
@ApiOperation("查询所有字典数据")
|
||||||
// @ApiIgnore
|
@ApiIgnore
|
||||||
public HttpResult<List<EpdDTO>> findAll(){
|
public HttpResult<List<EpdDTO>> findAll(){
|
||||||
String methodDescribe = getMethodDescribe("findAll");
|
String methodDescribe = getMethodDescribe("findAll");
|
||||||
List<EpdDTO> list = eleEpdPqdService.findAll();
|
List<EpdDTO> list = eleEpdPqdService.findAll();
|
||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/findByName")
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@ApiOperation("根据名称查询字典信息")
|
||||||
|
@ApiImplicitParam(name = "name", value = "指标名称", required = true)
|
||||||
|
@ApiIgnore
|
||||||
|
public HttpResult<EleEpdPqd> findByName(@RequestParam("name") @Validated String name){
|
||||||
|
String methodDescribe = getMethodDescribe("findByName");
|
||||||
|
EleEpdPqd po = eleEpdPqdService.lambdaQuery().eq(EleEpdPqd::getName,name).one();
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public enum UserResponseEnum {
|
|||||||
INVALID_TIME("A0101", "用户当前时间段禁止访问"),
|
INVALID_TIME("A0101", "用户当前时间段禁止访问"),
|
||||||
PASSWORD_TRANSPORT_ERROR("A0101", "密码传输完整性被破坏"),
|
PASSWORD_TRANSPORT_ERROR("A0101", "密码传输完整性被破坏"),
|
||||||
SPECIAL_PASSWORD("A0101", "密码需要包含特殊字符字母数字,长度为8-16"),
|
SPECIAL_PASSWORD("A0101", "密码需要包含特殊字符字母数字,长度为8-16"),
|
||||||
|
APP_PASSWORD("A0101", "密码长度为8-16"),
|
||||||
REPEAT_PASSWORD("A0101", "新密码与旧密码不能一致"),
|
REPEAT_PASSWORD("A0101", "新密码与旧密码不能一致"),
|
||||||
|
|
||||||
REGISTER_FAIL("A0102", "注册失败"),
|
REGISTER_FAIL("A0102", "注册失败"),
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public interface IUserSetService extends IService<UserSet> {
|
|||||||
* @author xy
|
* @author xy
|
||||||
* @date 2022/1/21 12:39
|
* @date 2022/1/21 12:39
|
||||||
*/
|
*/
|
||||||
String updatePassword(String id,String newPassword);
|
String updatePassword(String id,String newPassword, Boolean result);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 功能描述: 未登录 修改用户密码
|
* 功能描述: 未登录 修改用户密码
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
|||||||
if (Objects.isNull(user)){
|
if (Objects.isNull(user)){
|
||||||
throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND);
|
throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND);
|
||||||
}
|
}
|
||||||
String secretPassword = userSetService.updatePassword(userId, password);
|
String secretPassword = userSetService.updatePassword(userId, password,false);
|
||||||
user.setPassword(secretPassword);
|
user.setPassword(secretPassword);
|
||||||
user.setPwdValidity(LocalDateTime.now());
|
user.setPwdValidity(LocalDateTime.now());
|
||||||
user.setLoginTime(LocalDateTime.now());
|
user.setLoginTime(LocalDateTime.now());
|
||||||
@@ -252,7 +252,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
|||||||
if (Objects.isNull(user)){
|
if (Objects.isNull(user)){
|
||||||
throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND);
|
throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND);
|
||||||
}
|
}
|
||||||
String secretPassword = userSetService.updatePassword(user.getId(), password);
|
String secretPassword = userSetService.updatePassword(user.getId(), password,false);
|
||||||
user.setPassword(secretPassword);
|
user.setPassword(secretPassword);
|
||||||
user.setPwdValidity(LocalDateTime.now());
|
user.setPwdValidity(LocalDateTime.now());
|
||||||
user.setLoginTime(LocalDateTime.now());
|
user.setLoginTime(LocalDateTime.now());
|
||||||
|
|||||||
@@ -349,7 +349,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean updatePassword(String id, String password) {
|
public boolean updatePassword(String id, String password) {
|
||||||
String secretPassword = userSetService.updatePassword(id, password);
|
String secretPassword = userSetService.updatePassword(id, password,true);
|
||||||
User user = lambdaQuery().eq(User::getId, id).one();
|
User user = lambdaQuery().eq(User::getId, id).one();
|
||||||
user.setPassword(secretPassword);
|
user.setPassword(secretPassword);
|
||||||
user.setPwdValidity(LocalDateTime.now());
|
user.setPwdValidity(LocalDateTime.now());
|
||||||
|
|||||||
@@ -65,15 +65,15 @@ public class UserSetServiceImpl extends ServiceImpl<UserSetMapper, UserSet> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String updatePassword(String id,String newPassword) {
|
public String updatePassword(String id,String newPassword,Boolean result) {
|
||||||
String password = getSecretPassword(newPassword);
|
String password = getSecretPassword(newPassword);
|
||||||
return updatePsd(id,password);
|
return updatePsd(id,password,result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String updateFirstPassword(String id, String newPassword, String name, String ip) {
|
public String updateFirstPassword(String id, String newPassword, String name, String ip) {
|
||||||
String password = getSecretPasswordNotLogin(newPassword, name, ip);
|
String password = getSecretPasswordNotLogin(newPassword, name, ip);
|
||||||
return updatePsd(id,password);
|
return updatePsd(id,password,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -110,7 +110,52 @@ public class UserSetServiceImpl extends ServiceImpl<UserSetMapper, UserSet> impl
|
|||||||
* @param password
|
* @param password
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private String updatePsd(String id, String password) {
|
private String updatePsd(String id, String password,Boolean result) {
|
||||||
|
Sm4Utils sm4;
|
||||||
|
String psd,strSm4;
|
||||||
|
if (result){
|
||||||
|
String standard = PatternRegex.PASSWORD_REGEX;
|
||||||
|
Pattern pattern = Pattern.compile(standard);
|
||||||
|
Matcher m=pattern.matcher(password);
|
||||||
|
if (!m.find()){
|
||||||
|
throw new BusinessException(UserResponseEnum.SPECIAL_PASSWORD);
|
||||||
|
}
|
||||||
|
//密码是否需要复杂校验
|
||||||
|
} else {
|
||||||
|
String standard = PatternRegex.APP_PASSWORD_REGEX;
|
||||||
|
Pattern pattern = Pattern.compile(standard);
|
||||||
|
Matcher m=pattern.matcher(password);
|
||||||
|
if (!m.find()){
|
||||||
|
throw new BusinessException(UserResponseEnum.APP_PASSWORD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UserSet userSet = this.lambdaQuery().eq(UserSet::getUserId, id).one();
|
||||||
|
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
|
||||||
|
userQueryWrapper.eq("sys_user.id",id);
|
||||||
|
User user = userMapper.selectOne(userQueryWrapper);
|
||||||
|
String secretPassword = user.getPassword();
|
||||||
|
if (Objects.isNull(userSet)){
|
||||||
|
UserSet newUserSet = new UserSet();
|
||||||
|
String secretKey = PubUtils.randomCode(16);
|
||||||
|
newUserSet.setSecretKey(secretKey);
|
||||||
|
sm4 = new Sm4Utils(secretKey);
|
||||||
|
strSm4 = sm4.encryptData_ECB(password);
|
||||||
|
newUserSet.setStandBy(strSm4);
|
||||||
|
newUserSet.setUserId(id);
|
||||||
|
this.save(newUserSet);
|
||||||
|
psd = sm4.encryptData_ECB(strSm4 + secretKey);
|
||||||
|
} else {
|
||||||
|
sm4 = new Sm4Utils(userSet.getSecretKey());
|
||||||
|
strSm4 = sm4.encryptData_ECB(password);
|
||||||
|
psd = sm4.encryptData_ECB(strSm4 + userSet.getSecretKey());
|
||||||
|
}
|
||||||
|
if (Objects.equals(secretPassword,psd)){
|
||||||
|
throw new BusinessException(UserResponseEnum.REPEAT_PASSWORD);
|
||||||
|
}
|
||||||
|
return psd;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String updateAppPsd(String id, String password) {
|
||||||
Sm4Utils sm4;
|
Sm4Utils sm4;
|
||||||
String psd,strSm4;
|
String psd,strSm4;
|
||||||
String standard = PatternRegex.PASSWORD_REGEX;
|
String standard = PatternRegex.PASSWORD_REGEX;
|
||||||
|
|||||||
Reference in New Issue
Block a user