소스 검색

登录验证码失败10次调整及同步ccpm系统数据抛异常调整

sangwenwei 8 달 전
부모
커밋
9d31317f86
15개의 변경된 파일206개의 추가작업 그리고 39개의 파일을 삭제
  1. 6 1
      src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java
  2. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/ProjectPaperFilingController.java
  3. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java
  4. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java
  5. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java
  6. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java
  7. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java
  8. 6 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java
  9. 51 7
      src/main/java/com/jeeplus/modules/sys/web/LoginController.java
  10. 34 0
      src/main/java/com/jeeplus/modules/sys/web/RegisterController.java
  11. 7 1
      src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoAllController.java
  12. 7 1
      src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoController.java
  13. 6 1
      src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java
  14. 6 1
      src/main/java/com/jeeplus/modules/workcontractrecord/web/WorkContractRecordController.java
  15. 47 20
      src/main/webapp/webpage/modules/sys/sysLogin.jsp

+ 6 - 1
src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java

@@ -639,7 +639,12 @@ public class ProjectReportRecordController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveProjectReportOnline";
 			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending project info to cloud: " + e.getMessage());
+			}
 		}
 	}
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/ProjectPaperFilingController.java

@@ -198,7 +198,12 @@ public class ProjectPaperFilingController extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path + "/ccpmData/data/saveProjectReportPaper";
             HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
         }
     }
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java

@@ -821,7 +821,12 @@ public class RuralCostProjectMessageNewController extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path + "/ccpmData/data/saveProjectReview";
             HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
         }
     }
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java

@@ -912,7 +912,12 @@ public class RuralCostProjectMessageNewTwoController extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path + "/ccpmData/data/saveProjectReportOnline";
             HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
         }
     }
 }

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java

@@ -569,7 +569,12 @@ public class RuralCostProjectRecordsController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveProjectInfo";
 			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending project info to cloud: " + e.getMessage());
+			}
 		}
 	}
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java

@@ -1062,7 +1062,12 @@ public class RuralProjectMessageNewController extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path + "/ccpmData/data/saveProjectReview";
             HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
         }
     }
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java

@@ -454,7 +454,12 @@ public class RuralProjectMessageNewTwoController  extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path + "/ccpmData/data/saveProjectReportTwo";
             HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
         }
     }
 

+ 6 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java

@@ -515,7 +515,12 @@ public class RuralProjectRecordsController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveProjectInfo";
 			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending project info to cloud: " + e.getMessage());
+			}
 		}
 	}
 

+ 51 - 7
src/main/java/com/jeeplus/modules/sys/web/LoginController.java

@@ -76,6 +76,8 @@ import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.time.LocalDateTime;
 import java.util.*;
 
 /**
@@ -204,6 +206,7 @@ public class LoginController extends BaseController{
 				message = "您的登录信息过期,请重新登录!";
 			}
 
+
 			model.addAttribute(FormAuthenticationFilter.DEFAULT_USERNAME_PARAM, username);
 			model.addAttribute(FormAuthenticationFilter.DEFAULT_REMEMBER_ME_PARAM, rememberMe);
 			model.addAttribute(FormAuthenticationFilter.DEFAULT_MOBILE_PARAM, mobile);
@@ -213,16 +216,32 @@ public class LoginController extends BaseController{
 			if (logger.isDebugEnabled()){
 				//logger.debug("login fail, active session size: {}, message: {}, exception: {}",sessionDAO.getActiveSessions(false).size(), message, exception);
 			}
+			User user = UserUtils.getByLoginName(username);
+			if (user != null){
+				// 非授权异常,登录失败,验证码加1。
+				if (!UnauthorizedException.class.getName().equals(exception)){
+					model.addAttribute("isValidateCodeLogin", isValidateCodeLogin(user.getLoginName(), true, false));
+				}
 
-			// 非授权异常,登录失败,验证码加1。
-			if (!UnauthorizedException.class.getName().equals(exception)){
-				model.addAttribute("isValidateCodeLogin", isValidateCodeLogin(username, true, false));
+				// 验证失败清空验证码
+				//request.getSession().setAttribute(ValidateCodeServlet.VALIDATE_CODE, IdGen.uuid());
+				jedis = JedisUtils.getResource();
+				jedis.set(ValidateCodeServlet.VALIDATE_CODE, IdGen.uuid());
+
+				//从redis中获取失败次数
+				String key = "loginFailNum:"+user.getLoginName();
+				String loginFailNum = JedisUtils.getResource().get(key);
+				if (StringUtils.isNotBlank(loginFailNum)){
+					int num = Integer.parseInt(loginFailNum);
+					if (num >= 10){
+						model.addAttribute("maxCount","true");
+						message = "";
+						model.addAttribute(FormAuthenticationFilter.DEFAULT_MESSAGE_PARAM, message);
+					}
+				}
 			}
 
-			// 验证失败清空验证码
-			//request.getSession().setAttribute(ValidateCodeServlet.VALIDATE_CODE, IdGen.uuid());
-			jedis = JedisUtils.getResource();
-			jedis.set(ValidateCodeServlet.VALIDATE_CODE, IdGen.uuid());
+
 
 			// 如果是手机登录,则返回JSON字符串
 			if (mobile){
@@ -305,6 +324,17 @@ public class LoginController extends BaseController{
 		Principal principal = UserUtils.getPrincipal();
 		User user = UserUtils.getUser();
 		try {
+			//从redis中获取失败次数
+			String key = "loginFailNum:"+user.getLoginName();
+			String loginFailNum = JedisUtils.getResource().get(key);
+			if (StringUtils.isNotBlank(loginFailNum)){
+				int num = Integer.parseInt(loginFailNum);
+				if (num >= 10){
+					model.addAttribute("maxCount","true");
+					isValidateCodeLogin(user.getLoginName(), false, false);
+					return "modules/sys/sysLogin";
+				}
+			}
 
 			/**
 			 *  切换用户时更新用户的company,office
@@ -457,6 +487,20 @@ public class LoginController extends BaseController{
 		if (clean){
 			loginFailMap.remove(useruame);
 		}
+		// 保存到 Redis
+		JedisUtils.getResource().set("loginFailNum:"+useruame, loginFailNum.toString());
+
+		// 设置到第二天零点过期
+		LocalDateTime now = LocalDateTime.now();
+		LocalDateTime midnight = now.toLocalDate().plusDays(1).atStartOfDay();
+		long secondsUntilMidnight = Duration.between(now, midnight).getSeconds();
+		JedisUtils.getResource().expire("loginFailNum:"+useruame, (int) secondsUntilMidnight);
+
+		//用于测试
+//		LocalDateTime nextExpiry = now.toLocalDate().atTime(14, 18);
+//		long secondsUntilExpiry = Duration.between(now, nextExpiry).getSeconds();
+//		JedisUtils.getResource().expire("loginFailNum:" + useruame, (int) secondsUntilExpiry);
+
 		return loginFailNum >= 5;
 	}
 

+ 34 - 0
src/main/java/com/jeeplus/modules/sys/web/RegisterController.java

@@ -10,6 +10,7 @@ import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.sys.dao.UserDao;
 import com.jeeplus.modules.sys.entity.*;
+import com.jeeplus.modules.sys.security.FormAuthenticationFilter;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.service.SystemConfigService;
 import com.jeeplus.modules.sys.service.SystemService;
@@ -407,6 +408,30 @@ public class RegisterController extends BaseController {
 			return false;
 		}*/
 	}
+
+	/**
+	 * 查询登陆失败次数
+	 * @param request
+	 * @param loginName
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping(value = "validateUserName")
+	public String validateUserName(HttpServletRequest request,
+								   String loginName) {
+		//从redis中获取失败次数
+		String key = "loginFailNum:"+loginName;
+		String loginFailNum = JedisUtils.getResource().get(key);
+		if (StringUtils.isNotBlank(loginFailNum)){
+			int num = Integer.parseInt(loginFailNum);
+			if (num >= 10){
+				return "yes";
+			}
+		}
+		return "no";
+	}
+
+
 	/**
 	 * web端ajax验证密码是否正确
 	 */
@@ -424,6 +449,15 @@ public class RegisterController extends BaseController {
 		if (user ==null || org.apache.commons.lang3.StringUtils.isBlank(user.getId())){
 			return "false";
 		}
+		//从redis中获取当前用户登陆失败的次数
+		String key = "loginFailNum:"+user.getLoginName();
+		String loginFailNum = JedisUtils.getResource().get(key);
+		if (StringUtils.isNotBlank(loginFailNum)){
+			int num = Integer.parseInt(loginFailNum);
+			if (num >= 10){
+				return "false1";
+			}
+		}
 		//获取字典表中公共密码参数
 		List<MainDictDetail> publicPasswordList = DictUtils.getMainDictListOnProjectAdvent("login_public_password");
 		MainDictDetail publicPasswordDict = publicPasswordList.get(0);

+ 7 - 1
src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoAllController.java

@@ -18,6 +18,7 @@ import com.jeeplus.common.utils.TicketQueryUtils;
 import com.jeeplus.common.utils.excel.ExportExcel;
 import com.jeeplus.common.utils.excel.ImportExcel;
 import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.sys.entity.Area;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.utils.DictUtils;
@@ -247,7 +248,12 @@ public class WorkClientInfoAllController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveClient";
 			HttpEntity<WorkClientInfo> httpEntity = new HttpEntity<>(info, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkClientInfo.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkClientInfo.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending workClient info to cloud: " + e.getMessage());
+			}
 		}
 	}
 

+ 7 - 1
src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoController.java

@@ -31,6 +31,7 @@ import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
 import com.jeeplus.modules.workclientinfo.service.WorkClientInfoService;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
 import com.jeeplus.modules.workreimbursement.utils.VarStr;
 import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
 import org.apache.shiro.authz.annotation.Logical;
@@ -269,7 +270,12 @@ public class WorkClientInfoController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveClient";
 			HttpEntity<WorkClientInfo> httpEntity = new HttpEntity<>(info, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkClientInfo.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkClientInfo.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending workClient info to cloud: " + e.getMessage());
+			}
 		}
 	}
 

+ 6 - 1
src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java

@@ -1217,7 +1217,12 @@ public class WorkContractInfoController extends BaseController {
             HttpHeaders headers = new HttpHeaders();
             String url = path+"/ccpmData/data/saveContractInfo";
             HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info,headers);
-            restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkContractInfo.class);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkContractInfo.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending contract info to cloud: " + e.getMessage());
+            }
         }
 
     }

+ 6 - 1
src/main/java/com/jeeplus/modules/workcontractrecord/web/WorkContractRecordController.java

@@ -239,7 +239,12 @@ public class WorkContractRecordController extends BaseController {
 			HttpHeaders headers = new HttpHeaders();
 			String url = path + "/ccpmData/data/saveContractInfo";
 			HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info, headers);
-			restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkContractInfo.class);
+			try {
+				restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkContractInfo.class);
+			} catch (Exception e) {
+				// 记录错误日志或进行其他处理
+				System.err.println("Error sending contract info to cloud: " + e.getMessage());
+			}
 		}
 	}
 	/**

+ 47 - 20
src/main/webapp/webpage/modules/sys/sysLogin.jsp

@@ -67,6 +67,15 @@
 	</script>
 	<script type="text/javascript">
         $(document).ready(function() {
+			var maxCount = $("#maxCount").val();
+			if (maxCount === "true") {
+				$("#loginButton").attr("disabled", true);
+				$("#lastMsg").text("登录失败次数超过限制,今日无法登录.");
+
+				localStorage.setItem("formDisabled", "true"); // 存储状态
+			}else {
+				localStorage.removeItem("formDisabled"); // 清除状态
+			}
             $("#loginForm").validate({
                 rules: {
                     validateCode: {remote: "${pageContext.request.contextPath}/servlet/validateCodeServlet"}
@@ -90,29 +99,42 @@
             });
 
             $('#loginButton').click(function () {
+				event.preventDefault();
                 var username = $("#username").val();
                 var password = $.md5(($("#password").val()));
-                $.ajax({
-                    type: "post",
-                    url: "${ctx}/sys/register/validatePassword",
-                    data: {loginName:username,password:password},
-                    dataType:"text",
-                    success: function(data) {
-                    	if(data=="cf"){
+				$.ajax({
+					type: "post",
+					url: "${ctx}/sys/register/validatePassword",
+					data: {loginName:username,password:password},
+					dataType:"text",
+					success: function(data) {
+						console.log('data',data)
+
+						if(data=="false1"){
+							$("#lastMsg").text("登录失败次数超过限制,今日无法登录.");
+							// $("#loginForm").submit();
+						}
+						if(data=="cf"){
 							<%--layer.open({--%>
-								<%--type: 2,--%>
-								<%--area: ['40%', '40%'],--%>
-								<%--title: '选择用户',--%>
-								<%--maxmin: true, //开启最大化最小化按钮--%>
-								<%--content: '${ctx}/workstaff/workStaffBasicInfo/repeatName?name='+username--%>
+							<%--type: 2,--%>
+							<%--area: ['40%', '40%'],--%>
+							<%--title: '选择用户',--%>
+							<%--maxmin: true, //开启最大化最小化按钮--%>
+							<%--content: '${ctx}/workstaff/workStaffBasicInfo/repeatName?name='+username--%>
 							<%--});--%>
 
 						} else if(data=="true"){
-                            $("#loginButton").attr("disabled", true);
-                            // $("#loginForm").submit();
-                        }
-                    }
-                })
+							$("#loginButton").attr("disabled", true);
+							$("#loginForm").submit();
+						}else{
+							$("#loginForm").submit();
+						}
+
+					}
+				})
+
+
+
             }) ;
 
 			<%--$('#loginButton1').click(function () {--%>
@@ -543,6 +565,10 @@
 		.changeCode:hover{
 			color: red!important;
 		}
+		.disabled {
+			pointer-events: none; /* 禁用点击事件 */
+			opacity: 0.5; /* 可选:使元素看起来更透明 */
+		}
 	</style>
 	<%--<link id="layuicss-skincodecss" rel="stylesheet" href="./登录界面_files/code.css" media="all"></head>--%>
 <body class="login-layout " style="overflow:auto;">
@@ -571,6 +597,7 @@
 									<div class="widget-main bound" style="height:350px;">
 										<form id="loginForm" class="form-signin" action="${ctx}/login" method="post" novalidate="novalidate">
 											<fieldset>
+												<input type="hidden" id="maxCount" value="${maxCount}">
 												<div style="height:50px"></div>
 												<label class="block clearfix">
 															<span class="block input-icon input-icon-right">
@@ -589,7 +616,7 @@
 												<c:if test="${isValidateCodeLogin}">
 													<label class="block clearfix">
 													<span class=" input-icon input-icon-right" style="display: flex">
-														<input type="text" style="width: 200px" id="validateCode" name="validateCode" placeholder="验证码">
+														<input type="text" style="width: 200px" id="validateCode" name="validateCode" placeholder="验证码" class="form-control required">
 															<a style="text-decoration:none;" href="javascript:void(0);" rel="external nofollow" onclick="VerificationCode()">
 																<img style="margin-left: 5px" id="randCodeImage" alt="验证码" src="/getVerifyCode" width="100"/>
 																<span class="changeCode" style="font-size: 12px;font-weight: 200;color: dodgerblue">验证码刷新</span>
@@ -598,7 +625,7 @@
 														<span id="errorMsg" class="help-inline"></span>
 													</label>
 												</c:if>
-
+													<span id="lastMsg" class="help-inline" style="color: red;"></span>
 
 
 												<!-- 										<button type="button" id="getCompanyBtn" style="vertical-align:middle " class="dropdown" value="获取企业">我的企业</button>
@@ -660,7 +687,7 @@
 
 
 
-										<div class="form-options option1 clearfix">
+										<div class="form-options option1 clearfix" id="formOptions">
 											<div style="width: 20px;height: auto" class="pull-left">
 											</div>