Browse Source

批量初始化密码

yhliang 2 years ago
parent
commit
8338603168

+ 27 - 0
leiSP-admin/src/main/java/com/sooka/web/controller/system/SysUserController.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import com.business.slfh.tools.PinYinUtil;
+import com.sooka.system.service.ISysConfigService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -53,6 +54,9 @@ public class SysUserController extends BaseController
     @Autowired
     private SysPasswordService passwordService;
 
+    @Autowired
+    private ISysConfigService configService;
+
     @RequiresPermissions("system:user:view")
     @GetMapping()
     public String user()
@@ -297,4 +301,27 @@ public class SysUserController extends BaseController
         userService.checkUserAllowed(user);
         return toAjax(userService.changeStatus(user));
     }
+
+    @PostMapping("/passwordInit")
+    @ResponseBody
+    public AjaxResult passwordInit() {
+
+        List<SysUser> list = userService.selectUserList(new SysUser());
+
+        System.out.println(list.size());
+        if (list.size() == 0) {
+            return AjaxResult.error("初始化失败,没有符合条件的用户");
+        }
+
+        String password = configService.selectConfigByKey("sys.user.initPassword");
+
+        List<SysUser> newList = list.stream().map(sysUser -> {
+            sysUser.setPassword(passwordService.encryptPassword(sysUser.getLoginName(), password, sysUser.getSalt()));
+            return sysUser;
+        }).collect(Collectors.toList());
+
+
+        return AjaxResult.success(userService.passwordInit(newList));
+    }
+
 }

+ 3 - 3
leiSP-admin/src/main/resources/application-druid.yml

@@ -8,17 +8,17 @@ spring:
             master:
 
 #                现网数据库
-                # url: jdbc:mysql://127.0.0.1:53306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                # url: jdbc:mysql://127.0.0.1:53306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                 #username: lsqx
                 # password: Lishu123.456
 
 #                测试数据库
-#                url: jdbc:mysql://192.168.10.16:53306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                url: jdbc:mysql://192.168.10.16:53306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
 #                username: lsqx
 #                password: Lishu123.456
 
 #                本地数据库
-                url: jdbc:mysql://localhost:3306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/lishu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
                 username: root
                 password: root
 

+ 10 - 10
leiSP-admin/src/main/resources/logback.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-    <!--<property name="log.path" value="/Users/yanhongliang/Documents/leisp/logs" />-->
-<!--    <property name="log.path" value="/home/leisp/logs" />-->
-     <property name="log.path" value="D:/leisp/uploadPath/" />
+    <property name="log.path" value="/Users/yanhongliang/Documents/leisp/logs" />
+    <!--<property name="log.path" value="/home/leisp/logs" />-->
+     <!--<property name="log.path" value="D:/leisp/uploadPath/" />-->
     <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
@@ -13,7 +13,7 @@
 			<pattern>${log.pattern}</pattern>
 		</encoder>
 	</appender>
-	
+
 	<!-- 系统日志输出 -->
 	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
 	    <file>${log.path}/sys-info.log</file>
@@ -36,7 +36,7 @@
             <onMismatch>DENY</onMismatch>
         </filter>
 	</appender>
-	
+
 	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
 	    <file>${log.path}/sys-error.log</file>
         <!-- 循环政策:基于时间创建日志文件 -->
@@ -58,7 +58,7 @@
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
-	
+
 	<!-- 用户访问日志输出  -->
     <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<file>${log.path}/sys-user.log</file>
@@ -72,7 +72,7 @@
             <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
-	
+
 	<!-- 系统模块日志级别控制  -->
 	<logger name="com.sooka" level="info" />
 	<!-- Spring日志级别控制  -->
@@ -87,15 +87,15 @@
 	<root level="info">
 		<appender-ref ref="console" />
 	</root>
-	
+
 	<!--系统操作日志-->
     <root level="info">
         <appender-ref ref="file_info" />
         <appender-ref ref="file_error" />
     </root>
-	
+
 	<!--系统用户操作日志-->
     <logger name="sys-user" level="info">
         <appender-ref ref="sys-user"/>
     </logger>
-</configuration> 
+</configuration>

+ 11 - 2
leiSP-admin/src/main/resources/templates/system/user/add.html

@@ -165,6 +165,11 @@
 	<script>
 	    var prefix = ctx + "system/user";
 
+        // 密码验证正则表达式
+        jQuery.validator.addMethod("regexPassword", function(value, element) {
+            return this.optional(element) || /^(?=.*[a-z])(?=.*[A-Z])(?=.*[1-9])(?=.*[!|@|#|$|%|^|&|*]).{6,}$/.test(value);
+        }, "一个大写,一个小写,一个数字,一个符号");
+
         $("#form-user-add").validate({
         	onkeyup: false,
         	rules:{
@@ -186,8 +191,9 @@
                     }
         		},
         		password:{
-        			minlength: 5,
-        			maxlength: 20
+        			minlength: 6,
+        			maxlength: 20,
+                    regexPassword: true
         		},
         		email:{
                     email:true,
@@ -229,6 +235,9 @@
         		"email": {
                     remote: "Email已经存在"
                 },
+                "password":{
+                    regexPassword: "密码至少包一个大写字母、一个小写字母及一个符号"
+                },
         		"phonenumber":{
                 	remote: "手机号码已经存在"
         		}

+ 11 - 3
leiSP-admin/src/main/resources/templates/system/user/profile/resetPwd.html

@@ -37,6 +37,12 @@
 	<th:block th:include="include :: footer" />
 
 	<script>
+
+        // 密码验证正则表达式
+        jQuery.validator.addMethod("regexPassword", function(value, element) {
+            return this.optional(element) || /^(?=.*[a-z])(?=.*[A-Z])(?=.*[1-9])(?=.*[!|@|#|$|%|^|&|*]).{6,}$/.test(value);
+        }, "一个大写,一个小写,一个数字,一个符号");
+
 		$("#form-user-resetPwd").validate({
 			rules:{
 				oldPassword:{
@@ -54,7 +60,8 @@
 				},
 				newPassword: {
 	                required: true,
-	                minlength: 5,
+                    regexPassword: true,
+	                minlength: 6,
 	    			maxlength: 20
 	            },
 	            confirm: {
@@ -70,7 +77,8 @@
 	            newPassword: {
 	                required: "请输入新密码",
 	                minlength: "密码不能小于6个字符",
-	                maxlength: "密码不能大于20个字符"
+	                maxlength: "密码不能大于20个字符",
+                    regexPassword: "密码至少包一个大写字母、一个小写字母及一个符号"
 	            },
 	            confirm: {
 	                required: "请再次输入新密码",
@@ -80,7 +88,7 @@
 	        },
 	        focusCleanup: true
 		});
-		
+
 		function submitHandler() {
 	        if ($.validate.form()) {
 	        	$.operate.save(ctx + "system/user/profile/resetPwd", $('#form-user-resetPwd').serialize());

+ 16 - 4
leiSP-admin/src/main/resources/templates/system/user/resetPwd.html

@@ -23,17 +23,29 @@
 	</div>
 	<th:block th:include="include :: footer" />
 	<script type="text/javascript">
+
+        // 密码验证正则表达式
+        jQuery.validator.addMethod("regexPassword", function(value, element) {
+            return this.optional(element) || /^(?=.*[a-z])(?=.*[A-Z])(?=.*[1-9])(?=.*[!|@|#|$|%|^|&|*]).{6,}$/.test(value);
+        }, "一个大写,一个小写,一个数字,一个符号");
+
 		$("#form-user-resetPwd").validate({
 			rules:{
 				password:{
 					required:true,
-					minlength: 5,
-					maxlength: 20
-				},
+					minlength: 6,
+					maxlength: 20,
+                    regexPassword: true
+				}
+			},
+            messages: {
+				"password":{
+					regexPassword: "密码至少包一个大写字母、一个小写字母及一个符号"
+				}
 			},
 			focusCleanup: true
 		});
-		
+
 		function submitHandler() {
 	        if ($.validate.form()) {
 	        	$.operate.save(ctx + "system/user/resetPwd", $('#form-user-resetPwd').serialize());

+ 10 - 0
leiSP-admin/src/main/resources/templates/system/user/user.html

@@ -88,6 +88,9 @@
                 <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:user:export">
                     <i class="fa fa-download"></i> 导出
                 </a>
+                <a class="btn btn-info" onclick="passwordInit()" shiro:hasPermission="system:user:passwordInit">
+                    <i class="fa fa-info-circle"></i> 初始化
+                </a>
             </div>
 
             <div class="col-sm-12 select-table table-striped">
@@ -116,6 +119,13 @@
         queryDeptTree();
     });
 
+    function passwordInit() {
+        alert('成了');
+        $.operate.post(prefix + "/passwordInit", function (e) {
+            console.log('passwordInit', e);
+        });
+    }
+
     function queryUserList() {
         var options = {
             url: prefix + "/list",

+ 18 - 13
leiSP-system/src/main/java/com/sooka/system/mapper/SysUserMapper.java

@@ -8,14 +8,14 @@ import com.sooka.system.domain.SysUser;
 
 /**
  * 用户表 数据层
- * 
+ *
  * @author lei_wang
  */
 public interface SysUserMapper
 {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param sysUser 用户信息
      * @return 用户信息集合信息
      */
@@ -39,7 +39,7 @@ public interface SysUserMapper
 
     /**
      * 根据条件分页查询未已配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -47,7 +47,7 @@ public interface SysUserMapper
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -55,7 +55,7 @@ public interface SysUserMapper
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
@@ -71,7 +71,7 @@ public interface SysUserMapper
 
     /**
      * 通过手机号码查询用户
-     * 
+     *
      * @param phoneNumber 手机号码
      * @return 用户对象信息
      */
@@ -79,7 +79,7 @@ public interface SysUserMapper
 
     /**
      * 通过邮箱查询用户
-     * 
+     *
      * @param email 邮箱
      * @return 用户对象信息
      */
@@ -87,7 +87,7 @@ public interface SysUserMapper
 
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -95,7 +95,7 @@ public interface SysUserMapper
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -103,7 +103,7 @@ public interface SysUserMapper
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
@@ -119,7 +119,7 @@ public interface SysUserMapper
 
     /**
      * 修改用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -127,7 +127,7 @@ public interface SysUserMapper
 
     /**
      * 新增用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -135,7 +135,7 @@ public interface SysUserMapper
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param loginName 登录名称
      * @return 结果
      */
@@ -156,4 +156,9 @@ public interface SysUserMapper
      * @return 结果
      */
     public SysUser checkEmailUnique(String email);
+
+    /**
+     * 批量重置用户密码
+     */
+    public int batchUpdateUser(List<SysUser> list);
 }

+ 25 - 23
leiSP-system/src/main/java/com/sooka/system/service/ISysUserService.java

@@ -6,19 +6,21 @@ import com.sooka.system.domain.SysUserRole;
 
 /**
  * 用户 业务层
- * 
+ *
  * @author lei_wang
  */
 public interface ISysUserService
 {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
     public List<SysUser> selectUserList(SysUser user);
 
+    public int passwordInit(List<SysUser> list);
+
     /**
      * 根据条件分页查询用户列表
      *
@@ -29,7 +31,7 @@ public interface ISysUserService
 
     /**
      * 根据条件分页查询已分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -37,7 +39,7 @@ public interface ISysUserService
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -45,7 +47,7 @@ public interface ISysUserService
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
@@ -53,7 +55,7 @@ public interface ISysUserService
 
     /**
      * 通过手机号码查询用户
-     * 
+     *
      * @param phoneNumber 手机号码
      * @return 用户对象信息
      */
@@ -61,7 +63,7 @@ public interface ISysUserService
 
     /**
      * 通过邮箱查询用户
-     * 
+     *
      * @param email 邮箱
      * @return 用户对象信息
      */
@@ -69,7 +71,7 @@ public interface ISysUserService
 
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -77,7 +79,7 @@ public interface ISysUserService
 
     /**
      * 通过用户ID查询用户和角色关联
-     * 
+     *
      * @param userId 用户ID
      * @return 用户和角色关联列表
      */
@@ -85,7 +87,7 @@ public interface ISysUserService
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -93,7 +95,7 @@ public interface ISysUserService
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      * @throws Exception 异常
@@ -102,7 +104,7 @@ public interface ISysUserService
 
     /**
      * 保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -110,7 +112,7 @@ public interface ISysUserService
 
     /**
      * 注册用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -118,7 +120,7 @@ public interface ISysUserService
 
     /**
      * 保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -126,7 +128,7 @@ public interface ISysUserService
 
     /**
      * 修改用户详细信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -134,7 +136,7 @@ public interface ISysUserService
 
     /**
      * 用户授权角色
-     * 
+     *
      * @param userId 用户ID
      * @param roleIds 角色组
      */
@@ -142,7 +144,7 @@ public interface ISysUserService
 
     /**
      * 修改用户密码信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -150,7 +152,7 @@ public interface ISysUserService
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param loginName 登录名称
      * @return 结果
      */
@@ -174,14 +176,14 @@ public interface ISysUserService
 
     /**
      * 校验用户是否允许操作
-     * 
+     *
      * @param user 用户信息
      */
     public void checkUserAllowed(SysUser user);
 
     /**
      * 根据用户ID查询用户所属角色组
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -189,7 +191,7 @@ public interface ISysUserService
 
     /**
      * 根据用户ID查询用户所属岗位组
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -197,7 +199,7 @@ public interface ISysUserService
 
     /**
      * 导入用户数据
-     * 
+     *
      * @param userList 用户数据列表
      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
      * @param operName 操作用户
@@ -207,7 +209,7 @@ public interface ISysUserService
 
     /**
      * 用户状态修改
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */

+ 9 - 0
leiSP-system/src/main/java/com/sooka/system/service/impl/SysUserServiceImpl.java

@@ -255,6 +255,8 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.updateUser(user);
     }
 
+
+
     /**
      * 修改用户个人详细信息
      *
@@ -532,4 +534,11 @@ public class SysUserServiceImpl implements ISysUserService
     {
         return userMapper.updateUser(user);
     }
+
+
+    @Override
+    public int passwordInit(List<SysUser> list) {
+        return userMapper.batchUpdateUser(list);
+    }
+
 }

+ 12 - 0
leiSP-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -196,6 +196,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</if>
 	</select>
 
+	<update id="batchUpdateUser" parameterType="java.util.List">
+		<foreach collection="list" item="item" separator=";">
+			update sys_user
+			<set>
+				password = #{item.password}
+			</set>
+			<where>
+				user_id = #{item.userId}
+			</where>
+		</foreach>
+	</update>
+
 	<select id="selectUserByPhoneNumber" parameterType="String" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.phonenumber = #{phonenumber}