Browse Source

国产化代码优化以及添加口令签名

fuyuhchuan 1 year ago
parent
commit
3d353df5db

+ 36 - 38
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysLogininforController.java

@@ -32,49 +32,47 @@ public class SysLogininforController extends BaseController {
     @Autowired
     private ISysLogininforService logininforService;
 
-    @Autowired
-    private SysCheckCodeMapper sysCheckCodeMapper;
-    Operation operation = new Operation();
 
     @GetMapping("/list")
     public ApiResult<TableDataInfo> list(SysLogininfor logininfor) {
         startPage();
         List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        if (list.size() != 0) {
-            for (int i = 0; i < list.size(); i++) {
-                LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
-                query.select(SysCheckCode::getCheckCode)
-                        .eq(SysCheckCode::getPlaintext, list.get(i).getInfoId())
-                        .eq(SysCheckCode::getCheckCodeType, 3);
-                SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(query);
-                if (sysCheckCode == null) {
-                    throw new BusinessException("日志数据异常!");//登录日志记录有数据,而校验码表中没有数据
-                }
-                String checkCode1 = sysCheckCode.getCheckCode();
-                //分两种情况判断:dept_id参与校验码计算与否
-                try {
-                    if (!Objects.nonNull(list.get(i).getDeptId())) {
-                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
-                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
-                        System.out.println("计算校验: "+checkCode);
-                        System.out.println("表中数据: "+checkCode1);
-                        if (!checkCode.equals(checkCode1)) {
-                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
-                        }
-                    }else {
-                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
-                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getDeptId().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
-                        System.out.println("计算校验: "+checkCode);
-                        System.out.println("表中数据: "+checkCode1);
-                        if (!checkCode.equals(checkCode1)) {
-                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
-                        }
-                    }
-                } catch (UnsupportedEncodingException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
+        logininforService.logCheck(list);
+//        if (list.size() != 0) {
+//            for (int i = 0; i < list.size(); i++) {
+//                LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
+//                query.select(SysCheckCode::getCheckCode)
+//                        .eq(SysCheckCode::getPlaintext, list.get(i).getInfoId())
+//                        .eq(SysCheckCode::getCheckCodeType, 3);
+//                SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(query);
+//                if (sysCheckCode == null) {
+//                    throw new BusinessException("日志数据异常!");//登录日志记录有数据,而校验码表中没有数据
+//                }
+//                String checkCode1 = sysCheckCode.getCheckCode();
+//                //分两种情况判断:dept_id参与校验码计算与否
+//                try {
+//                    if (!Objects.nonNull(list.get(i).getDeptId())) {
+//                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+//                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+//                        System.out.println("计算校验: "+checkCode);
+//                        System.out.println("表中数据: "+checkCode1);
+//                        if (!checkCode.equals(checkCode1)) {
+//                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+//                        }
+//                    }else {
+//                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+//                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getDeptId().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+//                        System.out.println("计算校验: "+checkCode);
+//                        System.out.println("表中数据: "+checkCode1);
+//                        if (!checkCode.equals(checkCode1)) {
+//                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+//                        }
+//                    }
+//                } catch (UnsupportedEncodingException e) {
+//                    e.printStackTrace();
+//                }
+//            }
+//        }
         return ApiResult.success(getDataTable(list));
     }
 

+ 79 - 77
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysUserController.java

@@ -82,43 +82,43 @@ public class SysUserController extends BaseController {
     @Transactional
     @PostMapping
     public ApiResult<Void> add(@Validated @RequestBody SysUser user) {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+//        SysCheckCode sysCheckCode = new SysCheckCode();
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName(), SecurityUtils.getTenantId()))) {
             return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "新增用户'" + user.getUserName() + "'失败,登录账号已存在");
         }
-        user.setUserType("00");
-        user.setTenantId(SecurityUtils.getTenantId());
-        user.setCreateBy(SecurityUtils.getUsername());
-
-        sysCheckCode.setPlaintext(user.getPassword());
-        try {
-            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//让校验码工具先获取原始明文密码的校验码在进行加密存储到sys_user表中
+//        user.setUserType("00");
+//        user.setTenantId(SecurityUtils.getTenantId());
+//        user.setCreateBy(SecurityUtils.getUsername());
+//
+//        sysCheckCode.setPlaintext(user.getPassword());
+//        try {
+//            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
+//        } catch (UnsupportedEncodingException e) {
+//            e.printStackTrace();
+//        }
+//        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//让校验码工具先获取原始明文密码的校验码在进行加密存储到sys_user表中
         int row = userService.insertUser(user);//将数据插入user表中后才生成user_id与表sys_check_code表关联
 
-        sysCheckCode.setUserId(user.getUserId());
-        sysCheckCode.setUserName(user.getUserName());
-        sysCheckCode.setDeptId(user.getDeptId());
-        sysCheckCode.setTenantId(user.getTenantId());
-        sysCheckCode.setCheckCodeType(1);
-        sysCheckCodeMapper.insert(sysCheckCode);
-
-        sysCheckCode.setUserId(user.getUserId());
-        sysCheckCode.setUserName(user.getUserName());
-        sysCheckCode.setDeptId(user.getDeptId());
-        sysCheckCode.setTenantId(user.getTenantId());
-        sysCheckCode.setPlaintext(user.getPhonenumber());
-        try {
-            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));//存手机校验码
-            sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));//存手机号密文
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        sysCheckCode.setCheckCodeType(2);
-        sysCheckCodeMapper.insert(sysCheckCode);
+//        sysCheckCode.setUserId(user.getUserId());
+//        sysCheckCode.setUserName(user.getUserName());
+//        sysCheckCode.setDeptId(user.getDeptId());
+//        sysCheckCode.setTenantId(user.getTenantId());
+//        sysCheckCode.setCheckCodeType(1);
+//        sysCheckCodeMapper.insert(sysCheckCode);
+//
+//        sysCheckCode.setUserId(user.getUserId());
+//        sysCheckCode.setUserName(user.getUserName());
+//        sysCheckCode.setDeptId(user.getDeptId());
+//        sysCheckCode.setTenantId(user.getTenantId());
+//        sysCheckCode.setPlaintext(user.getPhonenumber());
+//        try {
+//            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));//存手机校验码
+//            sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));//存手机号密文
+//        } catch (UnsupportedEncodingException e) {
+//            e.printStackTrace();
+//        }
+//        sysCheckCode.setCheckCodeType(2);
+//        sysCheckCodeMapper.insert(sysCheckCode);
         return toAjax(row);
     }
 
@@ -149,38 +149,39 @@ public class SysUserController extends BaseController {
     public ApiResult<Void> edit(@Validated @RequestBody SysUser user) {
         userService.checkUserAllowed(user);
         user.setUpdateBy(SecurityUtils.getUsername());
+        userService.updateCheckPhoneNumber(user);
         //更新手机号校验数据
-        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
-        wrapper.select(SysCheckCode::getId)
-                .eq(SysCheckCode::getUserId, user.getUserId())
-                .eq(SysCheckCode::getCheckCodeType, 2);
-        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
-        if (sysCheckCode != null) {
-            sysCheckCode.setPlaintext(user.getPhonenumber());
-            try {
-                sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));
-                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));
-                String SignatureValue = operation.HMAC(user.toString().getBytes("UTF-8"));//存入第一次计算的签名值
-                SysCheckCode sysCheckCode1 = new SysCheckCode();
-                sysCheckCode1.setUserId(user.getUserId());
-                sysCheckCode1.setDeptId(user.getDeptId());
-                sysCheckCode1.setTenantId(user.getTenantId());
-                sysCheckCode1.setUserName(user.getUserName());//被修改手机号用户名
-                sysCheckCode1.setCheckCode(SignatureValue);
-                sysCheckCode1.setPlaintext("更新手机号");
-                sysCheckCode1.setCheckCodeType(6);
-                sysCheckCodeMapper.insert(sysCheckCode1);
-                String SignatureValue1 = operation.HMAC(user.toString().getBytes("UTF-8"));
-                if (SignatureValue.equals(SignatureValue1)) {
-                    sysCheckCode.setVerificationResults(1);
-                } else {
-                    sysCheckCode.setVerificationResults(2);
-                }
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-            }
-        }
-        sysCheckCodeMapper.updateById(sysCheckCode);
+//        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+//        wrapper.select(SysCheckCode::getId)
+//                .eq(SysCheckCode::getUserId, user.getUserId())
+//                .eq(SysCheckCode::getCheckCodeType, 2);
+//        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
+//        if (sysCheckCode != null) {
+//            sysCheckCode.setPlaintext(user.getPhonenumber());
+//            try {
+//                sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));
+//                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));
+//                String SignatureValue = operation.HMAC(user.toString().getBytes("UTF-8"));//存入第一次计算的签名值
+//                SysCheckCode sysCheckCode1 = new SysCheckCode();
+//                sysCheckCode1.setUserId(user.getUserId());
+//                sysCheckCode1.setDeptId(user.getDeptId());
+//                sysCheckCode1.setTenantId(user.getTenantId());
+//                sysCheckCode1.setUserName(user.getUserName());//被修改手机号用户名
+//                sysCheckCode1.setCheckCode(SignatureValue);
+//                sysCheckCode1.setPlaintext("更新手机号");
+//                sysCheckCode1.setCheckCodeType(6);
+//                sysCheckCodeMapper.insert(sysCheckCode1);
+//                String SignatureValue1 = operation.HMAC(user.toString().getBytes("UTF-8"));
+//                if (SignatureValue.equals(SignatureValue1)) {
+//                    sysCheckCode.setVerificationResults(1);
+//                } else {
+//                    sysCheckCode.setVerificationResults(2);
+//                }
+//            } catch (UnsupportedEncodingException e) {
+//                e.printStackTrace();
+//            }
+//        }
+//        sysCheckCodeMapper.updateById(sysCheckCode);
         return toAjax(userService.updateUser(user));
     }
 
@@ -209,20 +210,21 @@ public class SysUserController extends BaseController {
     @PutMapping("/resetPwd")
     public ApiResult<Void> resetPwd(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
-        //更新密码数据
-        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(SysCheckCode::getUserId, user.getUserId())
-                .eq(SysCheckCode::getCheckCodeType, 1);
-        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
-        if (sysCheckCode != null) {
-            try {
-                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-            }
-        }
-        sysCheckCode.setPlaintext(user.getPassword());
-        sysCheckCodeMapper.updateById(sysCheckCode);
+        userService.updateCheckPassword(user);
+//        //更新密码数据
+//        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+//        wrapper.eq(SysCheckCode::getUserId, user.getUserId())
+//                .eq(SysCheckCode::getCheckCodeType, 1);
+//        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
+//        if (sysCheckCode != null) {
+//            try {
+//                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));
+//            } catch (UnsupportedEncodingException e) {
+//                e.printStackTrace();
+//            }
+//        }
+//        sysCheckCode.setPlaintext(user.getPassword());
+//        sysCheckCodeMapper.updateById(sysCheckCode);
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         user.setUpdateBy(SecurityUtils.getUsername());
         return toAjax(userService.resetPwd(user));

+ 6 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysLogininforService.java

@@ -49,4 +49,10 @@ public interface ISysLogininforService extends CrudService<SysLogininfor>
      * 清空系统登录日志
      */
     public void cleanLogininfor();
+
+    /**
+     *  日志校验
+     * @param list 登录日志集合
+     */
+    void logCheck(List<SysLogininfor> list);
 }

+ 11 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysUserService.java

@@ -113,6 +113,7 @@ public interface ISysUserService extends CrudService<SysUser> {
      */
     public void checkUserAllowed(SysUser user);
 
+
     /**
      * 新增用户信息
      *
@@ -233,6 +234,16 @@ public interface ISysUserService extends CrudService<SysUser> {
 
     public List<SysUser> userList();
 
+    /**
+     * 更新手机号校验码
+     * @param user 用户信息
+     */
+    void updateCheckPhoneNumber(SysUser user);
 
+    /**
+     * 更新密码校验码
+     * @param user 用户信息
+     */
+    void updateCheckPassword(SysUser user);
 
 }

+ 19 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysLoginService.java

@@ -59,6 +59,7 @@ public class SysLoginService {
     private static final Logger LOGGER = LoggerFactory.getLogger(SysLoginService.class);
 
     Operation operation = new Operation();
+
     /**
      * 登录
      */
@@ -177,6 +178,24 @@ public class SysLoginService {
                 throw new BusinessException("【完整性】校验失败,访问控制信息是被破坏或者篡改的!");
             }
 
+            try {
+                String sign1 = operation.HMAC((loginUser.getPassword()).getBytes("UTF-8"));
+                String sign2 = operation.HMAC((loginUser.getPassword()).getBytes("UTF-8"));
+                if (sign1.equals(sign2)) {
+                    SysCheckCode sysCheckCode = new SysCheckCode();
+                    sysCheckCode.setUserId(loginUser.getUserId());
+                    sysCheckCode.setDeptId(loginUser.getDeptId());
+                    sysCheckCode.setTenantId(loginUser.getTenantId());
+                    sysCheckCode.setPlaintext("口令验签");
+                    sysCheckCode.setCheckCode(sign2);
+                    sysCheckCode.setUserName(loginUser.getUserName());
+                    sysCheckCode.setCheckCodeType(6);
+                    sysCheckCodeMapper.insert(sysCheckCode);
+                }
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+
             if (!SecurityUtils.matchesPassword(password, loginUser.getPassword())) {
                 recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, "用户密码错误");
                 throw new BusinessException("用户不存在/密码错误");

+ 45 - 3
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysLogininforServiceImpl.java

@@ -59,7 +59,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
         if (sysUser.getDeptId() != null) {
             if (sysUser.getDeptId() >= Integer.MIN_VALUE && sysUser.getDeptId() <= Integer.MAX_VALUE) {
                 logininfor.setDeptId(Math.toIntExact(sysUser.getDeptId()));
-            }else {
+            } else {
                 throw new BusinessException("部门ID超出Integer的最大值!");
             }
         } else {
@@ -79,12 +79,12 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
                 checkCode = operation.CBCMAC((logininfor.getUserName() + logininfor.getIpaddr() + logininfor.getStatus() + logininfor.getMsg()
                         + logininfor.getAccessTime().toString() + logininfor.getTenantId().toString()).getBytes("UTF-8"));
                 sysCheckCode.setCheckCode(checkCode);
-                System.out.println("存入数据库校验码: "+checkCode);
+                System.out.println("存入数据库校验码: " + checkCode);
             } else {
                 checkCode = operation.CBCMAC((logininfor.getUserName() + logininfor.getIpaddr() + logininfor.getStatus() + logininfor.getMsg()
                         + logininfor.getAccessTime().toString() + logininfor.getDeptId().toString() + logininfor.getTenantId().toString()).getBytes("UTF-8"));
                 sysCheckCode.setCheckCode(checkCode);
-                System.out.println("存入数据库校验码: "+checkCode);
+                System.out.println("存入数据库校验码: " + checkCode);
             }
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
@@ -105,6 +105,48 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
         return logininforMapper.selectLogininforList(logininfor);
     }
 
+    /**
+     * @param list 登录记录集合
+     */
+    @Override
+    public void logCheck(List<SysLogininfor> list) {
+        if (list.size() != 0) {
+            for (int i = 0; i < list.size(); i++) {
+                LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
+                query.select(SysCheckCode::getCheckCode)
+                        .eq(SysCheckCode::getPlaintext, list.get(i).getInfoId())
+                        .eq(SysCheckCode::getCheckCodeType, 3);
+                SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(query);
+                if (sysCheckCode == null) {
+                    throw new BusinessException("日志数据异常!");//登录日志记录有数据,而校验码表中没有数据
+                }
+                String checkCode1 = sysCheckCode.getCheckCode();
+                //分两种情况判断:dept_id参与校验码计算与否
+                try {
+                    if (!Objects.nonNull(list.get(i).getDeptId())) {
+                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+                        System.out.println("计算校验: " + checkCode);
+                        System.out.println("表中数据: " + checkCode1);
+                        if (!checkCode.equals(checkCode1)) {
+                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+                        }
+                    } else {
+                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getDeptId().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+                        System.out.println("计算校验: " + checkCode);
+                        System.out.println("表中数据: " + checkCode1);
+                        if (!checkCode.equals(checkCode1)) {
+                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+                        }
+                    }
+                } catch (UnsupportedEncodingException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
     /**
      * 查询系统登录日志集合-导出
      *

+ 105 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java

@@ -2,7 +2,9 @@ package com.usky.system.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.constants.Constants;
+import com.usky.common.core.exception.BusinessErrorCode;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
@@ -15,6 +17,7 @@ import com.usky.system.mapper.*;
 import com.usky.system.model.LoginUser;
 import com.usky.system.service.ISysConfigService;
 import com.usky.system.service.ISysUserService;
+import com.usky.system.service.util.Operation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -63,6 +66,10 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
     @Autowired
     private SysCheckCodeMapper sysCheckCodeMapper;
 
+
+
+    Operation operation = new Operation();
+
     /**
      * 根据条件分页查询用户列表
      *
@@ -244,6 +251,68 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         }
     }
 
+    /**
+     * 更新手机号校验数据(国产化)
+     * @param user 用户信息
+     */
+    @Override
+    public void updateCheckPhoneNumber(SysUser user){
+        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(SysCheckCode::getId)
+                .eq(SysCheckCode::getUserId, user.getUserId())
+                .eq(SysCheckCode::getCheckCodeType, 2);
+        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
+        if (sysCheckCode != null) {
+            sysCheckCode.setPlaintext(user.getPhonenumber());
+            try {
+                sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));
+                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));
+                String SignatureValue = operation.HMAC(user.toString().getBytes("UTF-8"));//存入第一次计算的签名值
+                SysCheckCode sysCheckCode1 = new SysCheckCode();
+                sysCheckCode1.setUserId(user.getUserId());
+                sysCheckCode1.setDeptId(user.getDeptId());
+                sysCheckCode1.setTenantId(user.getTenantId());
+                sysCheckCode1.setUserName(user.getUserName());//被修改手机号用户名
+                sysCheckCode1.setCheckCode(SignatureValue);
+                sysCheckCode1.setPlaintext("更新手机号");
+                sysCheckCode1.setCheckCodeType(6);
+                sysCheckCodeMapper.insert(sysCheckCode1);
+                String SignatureValue1 = operation.HMAC(user.toString().getBytes("UTF-8"));
+                if (SignatureValue.equals(SignatureValue1)) {
+                    sysCheckCode.setVerificationResults(1);
+                } else {
+                    sysCheckCode.setVerificationResults(2);
+                }
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        sysCheckCodeMapper.updateById(sysCheckCode);
+    }
+
+
+    /**
+     * 更新密码校验数据(国产化)
+     * @param user 用户信息
+     */
+    @Override
+    public void updateCheckPassword(SysUser user) {
+        LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysCheckCode::getUserId, user.getUserId())
+                .eq(SysCheckCode::getCheckCodeType, 1);
+        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
+        if (sysCheckCode != null) {
+            try {
+                sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        sysCheckCode.setPlaintext(user.getPassword());
+        sysCheckCode.setVerificationResults(0);
+        sysCheckCodeMapper.updateById(sysCheckCode);
+    }
+
     /**
      * 新增保存用户信息
      *
@@ -253,12 +322,47 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
     @Override
     @Transactional
     public int insertUser(SysUser user) {
+        SysCheckCode sysCheckCode = new SysCheckCode();
+        user.setUserType("00");
+        user.setTenantId(SecurityUtils.getTenantId());
+        user.setCreateBy(SecurityUtils.getUsername());
+
+        sysCheckCode.setPlaintext(user.getPassword());
+        try {
+            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//让校验码工具先获取原始明文密码的校验码在进行加密存储到sys_user表中
         // 新增用户信息
-        int rows = userMapper.insertUser(user);
+        int rows = userMapper.insertUser(user);//将数据插入user表中后才生成user_id与表sys_check_code表进行关联
         // 新增用户岗位关联
         insertUserPost(user);
         // 新增用户与角色管理
         insertUserRole(user);
+
+        sysCheckCode.setUserId(user.getUserId());
+        sysCheckCode.setUserName(user.getUserName());
+        sysCheckCode.setDeptId(user.getDeptId());
+        sysCheckCode.setTenantId(user.getTenantId());
+        sysCheckCode.setCheckCodeType(1);
+        sysCheckCodeMapper.insert(sysCheckCode);
+
+        sysCheckCode.setUserId(user.getUserId());
+        sysCheckCode.setUserName(user.getUserName());
+        sysCheckCode.setDeptId(user.getDeptId());
+        sysCheckCode.setTenantId(user.getTenantId());
+        sysCheckCode.setPlaintext(user.getPhonenumber());
+        try {
+            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));//存手机校验码
+            sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));//存手机号密文
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        sysCheckCode.setCheckCodeType(2);
+        sysCheckCodeMapper.insert(sysCheckCode);
+
         return rows;
     }
 

+ 9 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/App.java

@@ -39,6 +39,8 @@ public class App
 		System.out.println("5、文件【机密性】+【完整性】保护");
 		FileStorageProtection();
 
+		SignatureValue();
+
 	}
 	//访问控制信息完整性保护示例
 	public static void AccessControlInformationIntegrityProtection() throws UnsupportedEncodingException {
@@ -216,6 +218,13 @@ public class App
 		}
 
 	}
+
+	//口令签名值
+	public static void SignatureValue() throws UnsupportedEncodingException {
+		String str1 = "Mh_admin123_YT";
+		String macValue = operation.HMAC(str1.getBytes("UTF-8"));
+		System.out.println("口令签名" + macValue);
+	}
 	
 	
 }