Преглед изворни кода

登录密码强度校验(登录、修改密码、后端)

wangzhe пре 1 година
родитељ
комит
84c02f82b5

+ 41 - 0
leiSP-admin/src/main/java/com/sooka/web/controller/system/SysLoginController.java

@@ -15,6 +15,9 @@ import com.sooka.common.core.domain.AjaxResult;
 import com.sooka.common.utils.ServletUtils;
 import com.sooka.common.utils.StringUtils;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * 登录验证
  *
@@ -35,10 +38,48 @@ public class SysLoginController extends BaseController
         return "login";
     }
 
+    public static void main(String[] args) {
+        // 要验证的字符串
+        String password = "123a";
+        // 邮箱验证规则
+        String mediumRegex = "^(?=.{2,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$";
+        // 编译正则表达式
+        Pattern pattern = Pattern.compile(mediumRegex);
+        // 忽略大小写的写法
+        // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(password);
+        // 字符串是否与正则表达式相匹配
+        boolean rs = matcher.matches();
+        System.out.println(rs);
+    }
+
     @PostMapping("/login")
     @ResponseBody
     public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)
     {
+        //弱密码强度校验
+        if(password.length() < 10){
+            String msg = "密码不能小于8个字符";
+            return error(msg);
+        }
+//        boolean flag = false;
+        // 要验证的字符串
+//        String password = "123a";
+        // 邮箱验证规则
+        String mediumRegex = "^(?=.{2,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$";
+        // 编译正则表达式
+        Pattern pattern = Pattern.compile(mediumRegex);
+        // 忽略大小写的写法
+        // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(password);
+        // 字符串是否与正则表达式相匹配
+        boolean flag = matcher.matches();
+        if(!flag){
+            String msg = "请至少使用大小写字母、数字、符号两种类型组合的密码";
+            return error(msg);//请至少使用大小写字母、数字、符号两种类型组合的密码",//,长度至少为8位
+        }
+
+
         UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
         Subject subject = SecurityUtils.getSubject();
         try

+ 103 - 0
leiSP-admin/src/main/resources/templates/login.html

@@ -80,6 +80,109 @@
 <script src="../static/js/EasePack.min.js" th:src="@{/js/EasePack.min.js}"></script>
 <script src="../static/js/TweenLite.min.js" th:src="@{/js/TweenLite.min.js}"></script>
 <script src="../static/js/canvasindex.js" th:src="@{/js/canvasindex.js}"></script>
+<script>
+    //自定义校验规则
+    $.validator.addMethod(
+        //校验规则的名称
+        "checkPasswordStrong",
+        //校验的函数
+        function(value,element,params){
+            //value:输入的内容,即获取到输入的值
+            //element:被校验的元素对象,即节点
+            //params:规则对应的参数值
+            //定义一个标志
+            var flag = false;
+            //密码为八位及以上并且大小写字母数字特殊字符三项都包括
+            var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
+            //密码为八位及以上并且大小写字母、数字、特殊字符三项中有两项,强度是中等
+            // var mediumRegex = new RegExp("^(?=.{8,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$", "g");
+            var mediumRegex = new RegExp("^(?=.{2,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$", "g");
+            var enoughRegex = new RegExp("(?=.{8,}).*", "g");
+            // if(strongRegex.test(value)) {
+            //     //console.log('强密码-----',value)
+            //     this.str2="密码强度不错哦!"
+            //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:强</i>'
+            // } else if (mediumRegex.test(value)){
+            //     //console.log('中等密码-----',value)
+            //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:中等</i>'
+            //     this.str2="密码强度中等!"
+            // } else if(enoughRegex.test(value)){
+            //     //console.log('弱密码-----',value)
+            //     this.str2="密码强度太弱,请至少使用字母、数字、符号两种类型组合的密码!"
+            //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:弱</i>'
+            // } else {
+            //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。'
+            //     //console.log('密码-----',value)
+            // }
+            //校验方法:
+            if(mediumRegex.test(value)){
+                flag = true;
+            }
+            //仅当flag=true时校验器才表示通过校验,否则就会显示错误提示。
+            return flag;
+        }
+    );
+    $("#signupForm").validate({
+        rules:{
+            // oldPassword:{
+            //     required:true,
+            //     remote: {
+            //         url: ctx + "system/user/profile/checkPassword",
+            //         type: "get",
+            //         dataType: "json",
+            //         data: {
+            //             password: function() {
+            //                 return $("input[name='oldPassword']").val();
+            //             }
+            //         }
+            //     }
+            // },
+            // newPassword: {
+            //     required: true,
+            //     minlength: 5,
+            //     maxlength: 20
+            // },
+            // confirm: {
+            //     required: true,
+            //     equalTo: "#newPassword"
+            // },
+            password: {
+                required: true,
+                checkPasswordStrong: true,
+                minlength: 8,
+                maxlength: 20
+            }
+        },
+        messages: {
+            // oldPassword: {
+            //     required: "请输入原密码",
+            //     remote: "原密码错误"
+            // },
+            // newPassword: {
+            //     required: "请输入新密码",
+            //     minlength: "密码不能小于6个字符",
+            //     maxlength: "密码不能大于20个字符"
+            // },
+            // confirm: {
+            //     required: "请再次输入新密码",
+            //     equalTo: "两次密码输入不一致"
+            // },
+            password: {
+                required: "请输入密码",
+                checkPasswordStrong: "请至少使用大小写字母、数字、符号两种类型组合的密码",//,长度至少为8位
+                minlength: "密码不能小于8个字符",
+                maxlength: "密码不能大于20个字符"
+            }
 
+        },
+        focusCleanup: true
+    });
+
+    // function submitHandler() {
+    //     if ($.validate.form()) {
+    //         $.operate.save(ctx + "system/user/profile/resetPwd", $('#form-user-resetPwd').serialize());
+    //     }
+    // }
+</script>
 </body>
 </html>

+ 45 - 2
leiSP-admin/src/main/resources/templates/system/user/profile/resetPwd.html

@@ -37,6 +37,47 @@
 	<th:block th:include="include :: footer" />
 
 	<script>
+        //自定义校验规则
+        $.validator.addMethod(
+            //校验规则的名称
+            "checkPasswordStrong",
+            //校验的函数
+            function(value,element,params){
+                //value:输入的内容,即获取到输入的值
+                //element:被校验的元素对象,即节点
+                //params:规则对应的参数值
+                //定义一个标志
+                var flag = false;
+                //密码为八位及以上并且大小写字母数字特殊字符三项都包括
+                var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
+                //密码为八位及以上并且大小写字母、数字、特殊字符三项中有两项,强度是中等
+                // var mediumRegex = new RegExp("^(?=.{8,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$", "g");
+                var mediumRegex = new RegExp("^(?=.{2,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*\\W))).*$", "g");
+                var enoughRegex = new RegExp("(?=.{8,}).*", "g");
+                // if(strongRegex.test(value)) {
+                //     //console.log('强密码-----',value)
+                //     this.str2="密码强度不错哦!"
+                //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:强</i>'
+                // } else if (mediumRegex.test(value)){
+                //     //console.log('中等密码-----',value)
+                //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:中等</i>'
+                //     this.str2="密码强度中等!"
+                // } else if(enoughRegex.test(value)){
+                //     //console.log('弱密码-----',value)
+                //     this.str2="密码强度太弱,请至少使用字母、数字、符号两种类型组合的密码!"
+                //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。<i>当前密码强度:弱</i>'
+                // } else {
+                //     this.note='请至少使用大小写字母、数字、符号两种类型组合的密码,长度至少为8位。'
+                //     //console.log('密码-----',value)
+                // }
+                //校验方法:
+                if(mediumRegex.test(value)){
+                    flag = true;
+                }
+                //仅当flag=true时校验器才表示通过校验,否则就会显示错误提示。
+                return flag;
+            }
+        );
 		$("#form-user-resetPwd").validate({
 			rules:{
 				oldPassword:{
@@ -54,7 +95,8 @@
 				},
 				newPassword: {
 	                required: true,
-	                minlength: 5,
+                    checkPasswordStrong: true,
+	                minlength: 8,
 	    			maxlength: 20
 	            },
 	            confirm: {
@@ -69,7 +111,8 @@
 	            },
 	            newPassword: {
 	                required: "请输入新密码",
-	                minlength: "密码不能小于6个字符",
+                    checkPasswordStrong: "请至少使用大小写字母、数字、符号两种类型组合的密码",//,长度至少为8位
+	                minlength: "密码不能小于8个字符",
 	                maxlength: "密码不能大于20个字符"
 	            },
 	            confirm: {