Browse Source

add:等保认证

wulianwei 2 days ago
parent
commit
9755e03259

+ 13 - 0
src/main/java/com/tuoren/forward/controller/DeviceController.java

@@ -216,4 +216,17 @@ public class DeviceController {
 		return deviceService.resendRecord(req);
 	}
 	
+	/**
+	 * 
+	 * @param req
+	 * @return
+	 */
+	@PostMapping("searchResendProcess")
+    @ResponseBody
+    @Operation(summary = "日志重发进度查询")
+	public ResultData<DeviceRecordProcessResp> searchResendProcess(@RequestBody IdReq req){
+		log.info("searchResendProcess>>:{}",req);
+		return deviceService.searchResendProcess(req.getId());
+	}
+	
 }

+ 3 - 0
src/main/java/com/tuoren/forward/entity/User.java

@@ -48,6 +48,9 @@ public class User {
     @Schema(description = "登录令牌")
     private String token;
     
+    @Schema(description = "无效登录次数")
+    private Integer invalidCount;
+    
     @Schema(description="角色ID, 'roleId1,roleId2'")
     private List<String> roleIds;
 }

+ 3 - 0
src/main/java/com/tuoren/forward/entity/req/UserAddReq.java

@@ -36,6 +36,9 @@ public class UserAddReq {
     @Schema(description = "详细地址")
     private String address;
     
+    @Schema(description = "无效登录次数")
+    private Integer invalidCount;
+    
     @Schema(description="角色ID, 'roleId1,roleId2'")
     private List<String> roleIds;
 }

+ 26 - 2
src/main/java/com/tuoren/forward/service/DeviceService.java

@@ -275,8 +275,10 @@ public class DeviceService {
 				|| StringUtils.isBlank(req.getUserCode())) {
 			return ResultData.failNull(CommonConstant.LACK_PARAM);
 		}
-		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
 		User user = userMapper.selectByCode(req.getUserCode());	
+		if(user == null) {
+			return ResultData.failNull("不存在该用户,检查用户编码");
+		}
 		String processKey = UUIDUtil.get32UUID();
 		Runnable task = () -> {
 			Query query = new Query();
@@ -328,10 +330,32 @@ public class DeviceService {
 				}
 			}
 		};
-		resp.setProcessKey(processKey);
 		new Thread(task).start();
+		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
+		resp.setProcessKey(processKey);
+		return ResultData.success(resp);
+	}
+	
+	/**
+	 * @return
+	 * @title 日志重发进度
+	 */
+	public ResultData<DeviceRecordProcessResp> searchResendProcess(String token) {
+		if (StringUtils.isBlank(token)) {
+			return ResultData.failNull(CommonConstant.LACK_PARAM);
+		}
+		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
+		resp.setProcessKey(token);
+		String proStr = (String)redisTemplate.opsForHash().get(CommonConstant.LOG_RESERND_REDIS_PROCESS, token);
+		if(StringUtils.isBlank(proStr)) {
+			return ResultData.success(resp,"传输结束");
+		}
+		JSONObject jdata = JSONObject.parseObject(proStr);
+		resp.setTotal(jdata.getInteger("total"));
+		resp.setSendNum(jdata.getInteger("sendNum"));
 		return ResultData.success(resp);
 	}
 
 
+
 }

+ 29 - 3
src/main/java/com/tuoren/forward/service/UserService.java

@@ -39,11 +39,14 @@ import com.tuoren.forward.util.ResultPage;
 import com.tuoren.forward.util.UUIDUtil;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.Hutool;
 import cn.hutool.captcha.generator.MathGenerator;
+import cn.hutool.core.util.ReUtil;
 
 @Service
 public class UserService {
-	
+	private  final  Integer MAXCOUNT = 5;
+	private  final  Integer PWDLEN = 8;
 	@Autowired
 	RedisTemplate<String, Object> redisTemplate;
 	
@@ -81,9 +84,25 @@ public class UserService {
 		if(!mg.verify(verifyCode, captchaCode)) {
 			return ResultData.failNull("验证码错误");
 		}
+		if(req.getPassword().length()<8) {
+			return ResultData.failNull("密码长度不得小于8位");
+		}
+		if(!ReUtil.isMatch("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).+$", req.getPassword())) {
+			return ResultData.failNull("密码要包含特殊字符字母和数字");
+		}
 		User loginUser = userMapper.selectByUsername(req.getUsername());
-		if(loginUser == null || !MD5Util.encode32(req.getPassword()).equals(loginUser.getPassword())) {
-			return ResultData.failNull("用户名或密码错误");
+		if(loginUser == null) {
+			return ResultData.failNull("用户不存在");
+		}
+		if(!MD5Util.encode32(req.getPassword()).equals(loginUser.getPassword())) {
+			Integer invalidCount = loginUser.getInvalidCount()+1;
+			if(invalidCount > MAXCOUNT) {
+				return ResultData.failNull("密码次数太多,请联系管理员解锁");
+			}else {
+				loginUser.setInvalidCount(invalidCount);
+				userMapper.updateByPrimaryKeySelective(loginUser);
+				return ResultData.failNull("密码错误,还有"+(MAXCOUNT-invalidCount)+"次机会");
+			}
 		}
 		Date date= new Date();
 		List<String> roleIds = roleMapper.selectIdByUserId(loginUser.getId());
@@ -97,6 +116,7 @@ public class UserService {
 		user.setId(loginUser.getId());
 		user.setLasttime(date);
 		user.setToken(token);
+		user.setInvalidCount(0);
 		userMapper.updateByPrimaryKeySelective(user);
 		
 		if(logMapper.existLoginTodayByUseid(user.getId()) == null) {
@@ -354,6 +374,12 @@ public class UserService {
 		User user = new User();
 		BeanUtils.copyProperties(req, user);
 		if(!StringUtils.isEmpty(user.getPassword())) {
+			if(req.getPassword().length()<8) {
+				return ResultData.failNull("密码长度不得小于8位");
+			}
+			if(!ReUtil.isMatch("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).+$", req.getPassword())) {
+				return ResultData.failNull("密码要包含特殊字符字母和数字");
+			}
 			user.setPassword(MD5Util.encode32(user.getPassword()));
 		}
 		userMapper.updateByPrimaryKeySelective(user);

+ 1 - 1
src/main/resources/application.yml

@@ -112,7 +112,7 @@ register:
 
 #阿里云配置
 aliyun1:
-  enable: true
+  enable: false
   accessKey: LTAI4G7FA9ytMc76oNkJ45YJ
   accessSecret: R7hOvMfiHb0PYroDqUDXAYgB9htQss
   consumerGroupId: Zlpp6svZNbJN4slY0rwJ000100

+ 2 - 0
src/main/resources/db/migration/V1.0.4__user.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `forward`.`user` 
+ADD COLUMN `invalid_count` INT NULL DEFAULT 0 COMMENT '无效登录次数' AFTER `token`;

+ 8 - 2
src/main/resources/mapper/UserMapper.xml

@@ -14,9 +14,11 @@
     <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="region_code" jdbcType="VARCHAR" property="regionCode" />
     <result column="address" jdbcType="VARCHAR" property="address" />
+    <result column="token" jdbcType="VARCHAR" property="address" />
+    <result column="invalid_count" jdbcType="INTEGER" property="invalidCount" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, username, password, mobile, email, salt, enabled, createtime, lasttime,code,region_code,address,token
+    id, username, password, mobile, email, salt, enabled, createtime, lasttime,code,region_code,address,token,invalid_count
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
     select 
@@ -213,6 +215,9 @@
       <if test="token != null">
         token = #{token,jdbcType=VARCHAR},
       </if>
+      <if test="invalidCount != null">
+        invalid_count = #{invalidCount,jdbcType=INTEGER},
+      </if>
     </set>
     where id = #{id,jdbcType=VARCHAR}
   </update>
@@ -229,7 +234,8 @@
       code = #{code,jdbcType=VARCHAR},
       region_code = #{regionCode,jdbcType=VARCHAR},
       address = #{address,jdbcType=VARCHAR},
-      token = #{token,jdbcType=VARCHAR}
+      token = #{token,jdbcType=VARCHAR},
+      invalid_count = #{invalidCount,jdbcType=INTEGER}
     where id = #{id,jdbcType=VARCHAR}
   </update>
 </mapper>