From ebb2c8d515ef3756fb6634814f824f5dd5dd22c4 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 21 四月 2025 17:04:46 +0800
Subject: [PATCH] 代码初始化
---
server/src/main/java/com/doumee/core/utils/PwdCheckUtil.java | 78 ++++++++++++++++++++++++++
admin/src/components/system/user/OperaUserWindow.vue | 23 +++++++
admin/src/components/common/Header.vue | 23 +++++++
admin/src/components/system/user/ResetPwdWindow.vue | 23 +++++++
server/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java | 20 ++++++
admin/lianhelihua_admin/index.html | 2
6 files changed, 165 insertions(+), 4 deletions(-)
diff --git a/admin/lianhelihua_admin/index.html b/admin/lianhelihua_admin/index.html
index fba6e9f..1cd2c52 100644
--- a/admin/lianhelihua_admin/index.html
+++ b/admin/lianhelihua_admin/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/lianhelihua_admin/icon.png"><title>鑱斿悎鍒╁崕浜嬩欢涓婃姤绯荤粺</title><link href="/lianhelihua_admin/static/css/app.b20beb91.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/js/app.17e4dc64.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/js/chunk-vendors.40d691b2.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="stylesheet"><link href="/lianhelihua_admin/static/css/app.b20beb91.css" rel="stylesheet"></head><body><div id="app"></div><script src="/lianhelihua_admin/static/js/chunk-vendors.40d691b2.js"></script><script src="/lianhelihua_admin/static/js/app.17e4dc64.js"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/lianhelihua_admin/icon.png"><title>鑱斿悎鍒╁崕浜嬩欢涓婃姤绯荤粺</title><link href="/lianhelihua_admin/static/css/app.c56f0a7d.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/js/app.f5e3eac0.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/js/chunk-vendors.174acd1e.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="stylesheet"><link href="/lianhelihua_admin/static/css/app.c56f0a7d.css" rel="stylesheet"></head><body><div id="app"></div><script src="/lianhelihua_admin/static/js/chunk-vendors.174acd1e.js"></script><script src="/lianhelihua_admin/static/js/app.f5e3eac0.js"></script></body></html>
\ No newline at end of file
diff --git a/admin/src/components/common/Header.vue b/admin/src/components/common/Header.vue
index 6e95bc1..b8d5c98 100644
--- a/admin/src/components/common/Header.vue
+++ b/admin/src/components/common/Header.vue
@@ -72,7 +72,8 @@
{ required: true, message: '璇疯緭鍏ュ師濮嬪瘑鐮�' }
],
newPwd: [
- { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜' }
+ { required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' },
+ { validator: this.validatePassword, trigger: 'blur' },
],
confirmPwd: [
{ required: true, message: '璇峰啀娆¤緭鍏ユ柊瀵嗙爜' }
@@ -110,6 +111,26 @@
this.$refs.changePwdDataForm.resetFields()
})
},
+ validatePassword(rule, value, callback) {
+ if (!value) {
+ callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+ } else {
+ const lengthValid = /^.{6,20}$/.test(value)
+ const hasLetter = /[a-zA-Z]/.test(value)
+ const hasNumber = /[0-9]/.test(value)
+ const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
+
+ const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
+
+ if (!lengthValid) {
+ callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
+ } else if (typesCount < 2) {
+ callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
+ } else {
+ callback() // 楠岃瘉閫氳繃
+ }
+ }
+ },
/**
* 纭畾淇敼瀵嗙爜
*/
diff --git a/admin/src/components/system/user/OperaUserWindow.vue b/admin/src/components/system/user/OperaUserWindow.vue
index b00a4a0..c5da65d 100644
--- a/admin/src/components/system/user/OperaUserWindow.vue
+++ b/admin/src/components/system/user/OperaUserWindow.vue
@@ -77,7 +77,8 @@
{ required: true, message: '璇疯緭鍏ュ鍚�' }
],
password: [
- { required: true, message: '璇疯緭鍏ュ瘑鐮�' }
+ { required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' },
+ { validator: this.validatePassword, trigger: 'blur' }
],
avatar: [
{ required: true, message: '璇烽�夋嫨鐢ㄦ埛澶村儚' }
@@ -95,6 +96,26 @@
}
},
methods: {
+ validatePassword (rule, value, callback) {
+ if (!value) {
+ callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+ } else {
+ const lengthValid = /^.{6,20}$/.test(value)
+ const hasLetter = /[a-zA-Z]/.test(value)
+ const hasNumber = /[0-9]/.test(value)
+ const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
+
+ const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
+
+ if (!lengthValid) {
+ callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
+ } else if (typesCount < 2) {
+ callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
+ } else {
+ callback() // 楠岃瘉閫氳繃
+ }
+ }
+ },
/**
* 鎵撳紑绐楀彛
*
diff --git a/admin/src/components/system/user/ResetPwdWindow.vue b/admin/src/components/system/user/ResetPwdWindow.vue
index 276405a..48c7080 100644
--- a/admin/src/components/system/user/ResetPwdWindow.vue
+++ b/admin/src/components/system/user/ResetPwdWindow.vue
@@ -31,12 +31,33 @@
},
rules: {
password: [
- { required: true, message: '璇疯緭鍏ュ瘑鐮�' }
+ { required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' },
+ { validator: this.validatePassword, trigger: 'blur' }
]
}
}
},
methods: {
+ validatePassword (rule, value, callback) {
+ if (!value) {
+ callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+ } else {
+ const lengthValid = /^.{6,20}$/.test(value)
+ const hasLetter = /[a-zA-Z]/.test(value)
+ const hasNumber = /[0-9]/.test(value)
+ const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
+
+ const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
+
+ if (!lengthValid) {
+ callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
+ } else if (typesCount < 2) {
+ callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
+ } else {
+ callback() // 楠岃瘉閫氳繃
+ }
+ }
+ },
/**
* 鎵撳紑绐楀彛
*
diff --git a/server/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 79a0711..5a9c7a0 100644
--- a/server/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -3,6 +3,7 @@
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.utils.PwdCheckUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.system.dto.CreateSystemUserDTO;
import com.doumee.dao.system.dto.CreateUserRoleDTO;
@@ -56,6 +57,12 @@
@Override
public void updatePwd(UpdatePwdDto dto) {
+ if(StringUtils.isBlank(dto.getNewPwd())
+ ||dto.getNewPwd().length()>20
+ ||dto.getNewPwd().length()<6
+ ||!PwdCheckUtil.checkPassword(dto.getNewPwd())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝瀵嗙爜澶嶆潅搴︿笉婊¤冻瑕佹眰锛�6-20涓瓧绗︼紝鑷冲皯鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃2绉�");
+ }
SystemUser user = systemUserService.findById(dto.getUserId());
if (user.getDeleted()) {
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鐢ㄦ埛涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎");
@@ -73,6 +80,12 @@
@Override
public void resetPwd(ResetSystemUserPwdDTO dto) {
+ if(StringUtils.isBlank(dto.getPassword())
+ ||dto.getPassword().length()>20
+ ||dto.getPassword().length()<6
+ ||!PwdCheckUtil.checkPassword(dto.getPassword())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝瀵嗙爜澶嶆潅搴︿笉婊¤冻瑕佹眰锛�6-20涓瓧绗︼紝鑷冲皯鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃2绉�");
+ }
// 鏌ヨ鐢ㄦ埛
SystemUser systemUser = systemUserService.findById(dto.getId());
if (systemUser == null || systemUser.getDeleted()) {
@@ -88,6 +101,12 @@
@Override
@Transactional
public void create(CreateSystemUserDTO systemUser) {
+ if(StringUtils.isBlank(systemUser.getPassword())
+ ||systemUser.getPassword().length()>20
+ ||systemUser.getPassword().length()<6
+ ||!PwdCheckUtil.checkPassword(systemUser.getPassword())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝瀵嗙爜澶嶆潅搴︿笉婊¤冻瑕佹眰锛�6-20涓瓧绗︼紝鑷冲皯鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃2绉�");
+ }
// 楠岃瘉鐢ㄦ埛鍚�
SystemUser queryUserDto = new SystemUser();
queryUserDto.setUsername(systemUser.getUsername());
@@ -106,6 +125,7 @@
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "宸ュ彿宸插瓨鍦�");
}
}
+
// 鐢熸垚瀵嗙爜鐩�
String salt = RandomStringUtils.randomAlphabetic(6);
// 鐢熸垚瀵嗙爜
diff --git a/server/src/main/java/com/doumee/core/utils/PwdCheckUtil.java b/server/src/main/java/com/doumee/core/utils/PwdCheckUtil.java
new file mode 100644
index 0000000..e71f277
--- /dev/null
+++ b/server/src/main/java/com/doumee/core/utils/PwdCheckUtil.java
@@ -0,0 +1,78 @@
+package com.doumee.core.utils;
+
+import java.util.regex.Pattern;
+
+/**
+ * Java姝e垯鏍¢獙瀵嗙爜鑷冲皯鍖呭惈锛氬瓧姣嶆暟瀛楃壒娈婄鍙蜂腑鐨�2绉�
+ */
+public class PwdCheckUtil {
+
+ /**
+ * 鍋囧畾璁剧疆瀵嗙爜鏃讹紝瀵嗙爜瑙勫垯涓猴細 瀛楁瘝銆佹暟瀛椼�佺壒娈婄鍙凤紝鑷冲皯鍖归厤2绉�
+ * 鍒欏瘑鐮佸彲鑳藉嚭鐜扮殑鎯呭喌鏈夛細
+ * 1銆佹暟瀛�+鐗规畩绗﹀彿
+ * 2銆佸瓧姣�+鐗规畩绗﹀彿
+ * 3銆佸瓧姣�+鏁板瓧
+ * 4銆佸瓧姣�+鏁板瓧+鐗规畩绗﹀彿
+ * (缁勫悎涓庨『搴忔棤鍏�)
+ * 瑙e喅鎬濊矾锛�
+ * 1銆侀亶鍘嗗瓧绗︿覆鐨勫瓧绗︽暟缁勶紝鏌ョ湅鏄惁鍖呭惈鐩爣鐗规畩瀛楃锛岃嫢鍖呭惈锛屽垯鏍囪瀛楃涓�
+ * 鍖呭惈鐗规畩瀛楃锛屽苟鏇挎崲褰撳墠鐗规畩瀛楃涓�''銆�
+ * 2銆佸垽鏂墿涓嬬殑瀛楃缁勬垚鐨勫瓧绗︿覆锛屾槸鍚﹀尮閰嶄互涓嬫儏鍐�
+ * - 绾瓧姣�
+ * - 绾暟瀛�
+ * - 瀛楁瘝+鏁板瓧
+ * 3銆佸瓧绗︿覆鍖归厤瑙勫垯
+ * 绾瓧姣�+鍖呭惈鐗规畩瀛楃 ---- 鍖归厤閫氳繃
+ * 绾暟瀛�+鍖呭惈鐗规畩瀛楃 ---- 鍖归厤閫氳繃
+ * 瀛楁瘝+鏁板瓧+鍖呭惈涓暟瀛楃 ---- 鍖归厤閫氳繃
+ */
+ //鐗规畩瀛楃
+ public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";
+ // 绾瓧姣�
+ public static final String character = "[a-zA-Z]{1,}$";
+ // 绾暟瀛�
+ public static final String numberic = "[0-9]{1,}$";
+ // 瀛楁瘝鍜屾暟瀛�
+ public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +
+ "|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";
+ // 瀛楁瘝鎴栨暟瀛�
+ public static final String number_or_character = "[a-zA-Z0-9]+$";
+ // 瀛楁瘝鏁板瓧涓嬪垝绾�
+ public static final String ncw = "\\w+$";
+
+ public static boolean checkPassword(String targetString) {
+ String opStr = targetString;
+ boolean isLegal = false;
+ boolean hasSpecChar = false;
+ char[] charArray = opStr.toCharArray();
+ for (char c : charArray) {
+ if (SPEC_CHARACTERS.contains(String.valueOf(c))) {
+ hasSpecChar = true;
+ // 鏇挎崲姝ゅ瓧绗︿覆
+ opStr = opStr.replace(c, ' ');
+ }
+ }
+ String excSpecCharStr = opStr.replace(" ", "");
+ boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches();
+ boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches();
+ boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches();
+ isLegal = ((isPureNum && hasSpecChar)
+ || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;
+ System.out.println("瀛楃涓诧細" + targetString + ",鏄惁绗﹀悎瑙勫垯锛�" + isLegal);
+ System.out.println("---------------");
+ return isLegal;
+ }
+
+ public static void main(String[] args) {
+ checkPassword("123456a");
+// checkPassword("41234123");
+// checkPassword("#$%^&&*(");
+// checkPassword("fasd$$");
+// checkPassword("41234%%%");
+// checkPassword("fasd41^(324");
+// checkPassword("fa413%^&*");
+// checkPassword("&%fa413%^&*");
+ }
+
+}
\ No newline at end of file
--
Gitblit v1.9.3