guoshilong
2023-10-10 c2f8bc41ed50e88c13426b52d8c540a4f6d1ce22
用户加密校验
8 files modified
2 files added
167 ■■■■■ changed files
skjcmanager/skjcmanager-auth/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/Base64Utils.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/entity/User.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/feign/IUserClient.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/supo/UserSUPO.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/feign/UserClient.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java 53 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/pom.xml
@@ -69,6 +69,11 @@
            <artifactId>skjcmanager-sm-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-pwd-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <!--安全模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/Base64Utils.java
New file
@@ -0,0 +1,30 @@
package cn.gistack.common.utils;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
    // 加密
    public static String getBase64Encode(String str) {
        // String-->byte[]
        byte [] data = str.getBytes(StandardCharsets.UTF_8);
        // 编码(base64字符串)
        String base64Str = Base64.getEncoder().encodeToString(data);
        return base64Str;
    }
    /**
     * 对Base64字符串进行解码
     * @param base64Str
     * @return
     */
    public static String getBase64Decode(String base64Str) {
// 解码
        byte [] base64Data = Base64.getDecoder().decode(base64Str);
        // byte[]-->String(解码后的字符串)
        String str = new String(base64Data, StandardCharsets.UTF_8);
        return str;
    }
}
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/entity/User.java
@@ -92,5 +92,10 @@
     */
    private String postId;
    /**以下4个为加密字段**/
    private String sm4iv;
    private String keyindexs;
    private String maced;
    private String encdata;
}
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/feign/IUserClient.java
@@ -55,6 +55,8 @@
    String UPDATE_USER = API_PREFIX + "/upate-user";
    String REMOVE_USER = API_PREFIX + "/remove-user";
    String GET_ALL_USER_LIST = API_PREFIX+ "/get-all-user-list";
    String ENCRYPT_USER = API_PREFIX + "/encrypt-user";
    /**
     * 获取用户信息
     *
@@ -149,4 +151,10 @@
    @GetMapping(GET_ALL_USER_LIST)
    R<List<User>> getAllUserList();
    /**
     * 更新用户信息并加密
     * @return
     */
    @GetMapping(ENCRYPT_USER)
    String encryptUser();
}
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/supo/UserSUPO.java
New file
@@ -0,0 +1,22 @@
package cn.gistack.system.user.supo;
import lombok.Data;
/**
 * 用户加密类
 */
@Data
public class UserSUPO {
    /**
     * 手机号
     */
    private String phone;
    /**
     * 角色id
     */
    private String roleId;
    /**
     * 部门id
     */
    private String deptId;
}
skjcmanager/skjcmanager-service/skjcmanager-user/pom.xml
@@ -38,6 +38,11 @@
            <artifactId>skjcmanager-system-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-pwd-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/feign/UserClient.java
@@ -110,4 +110,20 @@
        return R.data(service.list());
    }
    @GetMapping(ENCRYPT_USER)
    @Override
    public String encryptUser() {
        //查询所有用户
        List<User> list = service.list();
        int count  = 0;
        for (User user : list){
            boolean b = service.updateById(user);
            if (b){
                count++;
            }
        }
        return "共:<span style='color:red'>"+ list.size() + "</span>名用户,成功加密:<span style='color:red'>"+ count + "</span>名用户";
    }
}
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
@@ -17,6 +17,9 @@
package cn.gistack.system.user.service.impl;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import cn.gistack.pwd.fegin.IPwdClient;
import cn.gistack.system.cache.DictCache;
import cn.gistack.system.cache.ParamCache;
import cn.gistack.system.cache.SysCache;
@@ -31,7 +34,9 @@
import cn.gistack.system.user.service.IUserDeptService;
import cn.gistack.system.user.service.IUserOauthService;
import cn.gistack.system.user.service.IUserService;
import cn.gistack.system.user.supo.UserSUPO;
import cn.gistack.system.user.vo.UserVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -76,6 +81,8 @@
    private final ISysClient sysClient;
    private final BladeTenantProperties tenantProperties;
    private final IPwdClient pwdClient;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean submit(User user) {
@@ -106,6 +113,44 @@
        return save(user) && submitUserDept(user);
    }
    public Boolean encryptUserInfo(User user){
        UserSUPO userSUPO = new UserSUPO();
        userSUPO.setPhone(user.getPhone());
        userSUPO.setRoleId(user.getRoleId());
        userSUPO.setDeptId(user.getDeptId());
        String message = JSONObject.toJSONString(userSUPO);
        R<CBCResultDTO> cbcRres = pwdClient.getCBCMacEncipher(message);
        if (cbcRres.getCode() != 200){
            return false;
        }
        CBCResultDTO data = cbcRres.getData();
        String keyIndex = data.getKeyIndex();
        String maced = data.getMaced();
        String sm4IV = data.getSm4IV();
        user.setKeyindexs(keyIndex);
        user.setMaced(maced);
        user.setSm4iv(sm4IV);
        R<ResultDTO> encryptRes = pwdClient.getEncrypt(sm4IV, keyIndex, message);
        if (encryptRes.getCode() != 200){
            return false;
        }
        user.setEncdata(encryptRes.getData().getData());
        return true;
    }
    @Override
    public boolean save(User entity) {
        //对User进行加密
        encryptUserInfo(entity);
        return super.save(entity);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateUser(User user) {
@@ -128,6 +173,14 @@
        return updateById(user);
    }
    @Override
    public boolean updateById(User entity) {
        encryptUserInfo(entity);
        return super.updateById(entity);
    }
    private boolean submitUserDept(User user) {
        List<Long> deptIdList = Func.toLongList(user.getDeptId());
        List<UserDept> userDeptList = new ArrayList<>();
skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml
@@ -58,6 +58,11 @@
            <artifactId>skjcmanager-nky-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-user-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java
@@ -1,6 +1,7 @@
package cn.gistack.job.executor.jobhandler;
import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
import cn.gistack.system.user.feign.IUserClient;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
@@ -19,6 +20,9 @@
    @Autowired
    private IAttResManagePersonClient attResManagePersonClient;
    @Autowired
    private IUserClient userClient;
    /**
     * 用户同步调度器
     * @return
@@ -34,4 +38,18 @@
        return ReturnT.SUCCESS;
    }
    /**
     * 用户同步调度器
     * @return
     */
    @XxlJob("encryptUserJobHandler")
    public ReturnT<String> encryptUser(String param) {
        XxlJobLogger.log("开始更新用户数据");
        String message = userClient.encryptUser();
        XxlJobLogger.log(message);
        XxlJobLogger.log("结束更新用户数据");
        return ReturnT.SUCCESS;
    }
}