xieb
2023-08-14 6df987540393b4a341fb4846a82da6a78e8b8039
增加云密码服务平台对接
8 files modified
15 files added
754 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/pom.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/pom.xml 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/dto/CBCResultDTO.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/dto/ResultDTO.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/fegin/IPwdClient.java 37 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/fegin/PwdClientFallback.java 29 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/pom.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/pom.xml 60 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/PwdApplication.java 25 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/feign/PwdClient.java 44 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/launch/PwdLauncherServiceImpl.java 33 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/service/IPwdSendService.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/service/impl/PwdSendServiceImpl.java 42 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/util/PwdSendRequestUtil.java 195 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/resources/application-dev.yml 38 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/resources/application-prod.yml 36 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/controller/DangerReportController.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/entity/DangerReport.java 8 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/service/IDangerReportService.java 5 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/service/impl/DangerReportServiceImpl.java 41 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/supo/DangerReportSUPO.java 56 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/vo/DangerReportVO.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/pom.xml
@@ -25,6 +25,7 @@
        <module>skjcmanager-alerts-api</module>
        <module>skjcmanager-xxljob-api</module>
        <module>skjcmanager-nky-api</module>
        <module>skjcmanager-pwd-api</module>
    </modules>
    <dependencies>
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/pom.xml
New file
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>skjcmanager-service-api</artifactId>
        <groupId>cn.gistack</groupId>
        <version>3.0.1.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>skjcmanager-pwd-api</artifactId>
    <name>${project.artifactId}</name>
    <version>${bladex.project.version}</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-cache</artifactId>
        </dependency>
    </dependencies>
</project>
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/dto/CBCResultDTO.java
New file
@@ -0,0 +1,21 @@
package cn.gistack.pwd.dto;
import lombok.Data;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/8/14 9:49
 */
@Data
public class CBCResultDTO {
    private String keyIndex;// 密钥索引KeyIndex
    private String sm4IV;// base64后的16字节字符串
    private String maced;// MAC计算值
    public CBCResultDTO(String keyIndex, String sm4IV, String maced) {
        this.keyIndex = keyIndex;
        this.sm4IV = sm4IV;
        this.maced = maced;
    }
}
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/dto/ResultDTO.java
New file
@@ -0,0 +1,19 @@
package cn.gistack.pwd.dto;
import lombok.Data;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: 用于接收云密码服务平台接口返回对象
 * @USER: aix
 * @DATE: 2023/8/11 17:48
 */
@Data
public class ResultDTO {
    private String resultCode;
    private String resultString;
    private String data;
}
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/fegin/IPwdClient.java
New file
@@ -0,0 +1,37 @@
package cn.gistack.pwd.fegin;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/8/14 14:16
 */
@FeignClient(
    value = "blade-pwd",
    fallback = PwdClientFallback.class
)
public interface IPwdClient {
    String API_PREFIX = "/client";
    String GET_CBCMACENCIPHER = API_PREFIX + "/getCBCMacEncipher";
    String GET_ENCRYPT = API_PREFIX + "/getEncrypt";
    String GET_DECRYPT = API_PREFIX + "/getDecrypt";
    @PostMapping(GET_CBCMACENCIPHER)
    R<CBCResultDTO> getCBCMacEncipher(@RequestParam("message")String message);
    @PostMapping(GET_ENCRYPT)
    R<ResultDTO> getEncrypt(@RequestParam("sm4Iv")String sm4Iv, @RequestParam("keyIndex")String keyIndex, @RequestParam("message")String message);
    @PostMapping(GET_DECRYPT)
    R<ResultDTO> getDecrypt(@RequestParam("sm4Iv")String sm4Iv, @RequestParam("keyIndex")String keyIndex, @RequestParam("message")String message);
}
skjcmanager/skjcmanager-service-api/skjcmanager-pwd-api/src/main/java/cn/gistack/pwd/fegin/PwdClientFallback.java
New file
@@ -0,0 +1,29 @@
package cn.gistack.pwd.fegin;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import org.springblade.core.tool.api.R;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/8/14 14:17
 */
public class PwdClientFallback implements IPwdClient {
    @Override
    public R<CBCResultDTO> getCBCMacEncipher(String message) {
        return R.fail("获取数据失败");
    }
    @Override
    public R<ResultDTO> getEncrypt(String sm4Iv, String keyIndex, String message) {
        return R.fail("获取数据失败");
    }
    @Override
    public R<ResultDTO> getDecrypt(String sm4Iv, String keyIndex, String message) {
        return R.fail("获取数据失败");
    }
}
skjcmanager/skjcmanager-service/pom.xml
@@ -25,6 +25,7 @@
        <module>skjcmanager-alerts</module>
        <module>skjcmanager-xxljob</module>
        <module>skjcmanager-nky</module>
        <module>skjcmanager-pwd</module>
    </modules>
    <dependencies>
skjcmanager/skjcmanager-service/skjcmanager-pwd/pom.xml
New file
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>skjcmanager-service</artifactId>
        <groupId>cn.gistack</groupId>
        <version>3.0.1.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>skjcmanager-pwd</artifactId>
    <version>${bladex.project.version}</version>
    <name>${project.artifactId}</name>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-core-boot</artifactId>
        </dependency>
        <!--开启多数据源-->
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-core-auto</artifactId>
            <scope>compile</scope>
        </dependency>
        <!--远程调度-->
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-pwd-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <configuration>
                    <username>${docker.username}</username>
                    <password>${docker.password}</password>
                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <skip>false</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/PwdApplication.java
New file
@@ -0,0 +1,25 @@
package cn.gistack.pwd;
import org.mybatis.spring.annotation.MapperScan;
import org.springblade.core.cloud.client.BladeCloudApplication;
import org.springblade.core.launch.BladeApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@BladeCloudApplication
@EnableFeignClients({"cn.gistack"})
@MapperScan({"org.springblade.**.mapper.**","cn.gistack.pwd.**.mapper.**"})
public class PwdApplication {
    public static void main(String[] args) {
        BladeApplication.run("blade-pwd", PwdApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        return builder.build();
    }
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/feign/PwdClient.java
New file
@@ -0,0 +1,44 @@
package cn.gistack.pwd.feign;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import cn.gistack.pwd.fegin.IPwdClient;
import cn.gistack.pwd.service.IPwdSendService;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: 云密码服务平台Feign实现类
 * @USER: aix
 * @DATE: 2023/8/14 14:33
 */
@NonDS
@ApiIgnore
@RestController
@AllArgsConstructor
public class PwdClient implements IPwdClient {
    private final IPwdSendService pwdSendService;
    @Override
    public R<CBCResultDTO> getCBCMacEncipher(String message) {
        return R.data(pwdSendService.getCBCMacEncipher(message));
    }
    @Override
    @PostMapping(GET_ENCRYPT)
    public R<ResultDTO> getEncrypt(String sm4Iv, String keyIndex, String message) {
        return R.data(pwdSendService.getEncrypt(sm4Iv,keyIndex,message));
    }
    @Override
    @PostMapping(GET_DECRYPT)
    public R<ResultDTO> getDecrypt(String sm4Iv, String keyIndex, String message) {
        return R.data(pwdSendService.getDecrypt(sm4Iv,keyIndex,message));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/launch/PwdLauncherServiceImpl.java
New file
@@ -0,0 +1,33 @@
package cn.gistack.pwd.launch;
import cn.gistack.common.constant.LauncherConstant;
import org.springblade.core.auto.service.AutoService;
import org.springblade.core.launch.service.LauncherService;
import org.springblade.core.launch.utils.PropsUtil;
import org.springframework.boot.builder.SpringApplicationBuilder;
import java.util.Properties;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: nacos配置
 * @USER: aix
 * @DATE: 2023/7/31 10:51
 */
@AutoService(LauncherService.class)
public class PwdLauncherServiceImpl implements LauncherService {
    @Override
    public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
        Properties props = System.getProperties();
        // 通用注册
        PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
        PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
        PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
        PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile));
        //开启多数据源
        PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "true");
    }
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/service/IPwdSendService.java
New file
@@ -0,0 +1,30 @@
package cn.gistack.pwd.service;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/8/14 9:21
 */
public interface IPwdSendService {
    /**
     * CBC加密
     * @return 加密结果
     */
    CBCResultDTO getCBCMacEncipher(String message);
    ResultDTO getEncrypt(String sm4Iv, String keyIndex, String message);
    ResultDTO getDecrypt(String sm4Iv, String keyIndex, String message);
    /**
     * 用SM3算法进行HASH运算
     * @return 加密结果
     */
    ResultDTO getHASHEncipher();
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/service/impl/PwdSendServiceImpl.java
New file
@@ -0,0 +1,42 @@
package cn.gistack.pwd.service.impl;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import cn.gistack.pwd.service.IPwdSendService;
import cn.gistack.pwd.util.PwdSendRequestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/8/14 10:13
 */
@Service
public class PwdSendServiceImpl implements IPwdSendService {
    @Autowired
    private PwdSendRequestUtil pwdSendRequestUtil;
    @Override
    public CBCResultDTO getCBCMacEncipher(String message) {
        return pwdSendRequestUtil.getCBCMacEncipher(message);
    }
    @Override
    public ResultDTO getEncrypt(String sm4Iv, String keyIndex, String message) {
        return pwdSendRequestUtil.getEncrypt(sm4Iv, keyIndex, message);
    }
    @Override
    public ResultDTO getDecrypt(String sm4Iv, String keyIndex, String message) {
        return pwdSendRequestUtil.getDecrypt(sm4Iv, keyIndex, message);
    }
    @Override
    public ResultDTO getHASHEncipher() {
        return null;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/java/cn/gistack/pwd/util/PwdSendRequestUtil.java
New file
@@ -0,0 +1,195 @@
package cn.gistack.pwd.util;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import java.security.SecureRandom;
import java.util.Base64;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: 云密码服务平台接口对接工具类
 * @USER: aix
 * @DATE: 2023/8/11 16:12
 */
@Configuration
public class PwdSendRequestUtil {
    private static Logger logger = LoggerFactory.getLogger(PwdSendRequestUtil.class);
    @Value("${yunPwd.config.url-prefix}")
    public String urlPrefix;
    /**
     * 获取用户授权Token
     *
     * @return token
     */
    public String getToken() {
        String url = urlPrefix + "/api/Http/token";
        JSONObject jsonParm = new JSONObject();
        jsonParm.put("Action", "GetToken");
        jsonParm.put("DeviceType", "SCM");
        JSONObject targetJson = new JSONObject();
        targetJson.put("TimeStamp", String.valueOf(System.currentTimeMillis()));
        targetJson.put("UserName", "c");
        targetJson.put("AppID", "1655430695646eaab36117987e19026b");
        targetJson.put("AppKey", "1445a67edb89302f6b9f055112b42c13");
        jsonParm.put("Target", targetJson);
        return apiRequest(url, jsonParm.toJSONString()).getData();
    }
    /**
     * 密钥申请
     *
     * @return 密钥
     */
    public String getKeyIndex() {
        String url = urlPrefix + "/api/Http/scm";
        JSONObject jsonParm = new JSONObject();
        jsonParm.put("Action", "ApplyKey");
        jsonParm.put("DeviceType", "SCM");
        JSONObject targetJson = new JSONObject();
        targetJson.put("TimeStamp", String.valueOf(System.currentTimeMillis()));
        targetJson.put("Token", getToken());
        targetJson.put("Algorithm", "1445a67edb89302f6b9f055112b42c13");
        jsonParm.put("Target", targetJson);
        return apiRequest(url, jsonParm.toJSONString()).getData();
    }
    /**
     * CBC加密
     *
     * @param message keyIndex:密钥  sm4IV:base64后的16字节字符串  maced:MAC计算值
     * @return
     */
    public CBCResultDTO getCBCMacEncipher(String message) {
        String url = urlPrefix + "/api/Http/scm";
        String sm4Iv = getSm4Iv();
        JSONObject jsonParm = new JSONObject();
        jsonParm.put("Action", "CBCMac");
        jsonParm.put("DeviceType", "SCM");
        JSONObject targetJson = new JSONObject();
        targetJson.put("TimeStamp", String.valueOf(System.currentTimeMillis()));
        targetJson.put("Token", getToken());
        targetJson.put("KeyIndex", getKeyIndex());
        targetJson.put("Message", message);
        targetJson.put("Sm4IV", sm4Iv);
        jsonParm.put("Target", targetJson);
        ResultDTO ret = apiRequest(url, jsonParm.toJSONString());
        return new CBCResultDTO(getKeyIndex(), sm4Iv, ret.getData());
    }
    /**
     * 加密
     * @param sm4Iv    算法为SM4时需要填写,16字节字符串
     * @param keyIndex 密钥
     * @param message 加密原数据
     * @return 密文
     */
    public ResultDTO getEncrypt(String sm4Iv, String keyIndex, String message) {
        String url = urlPrefix + "/api/Http/scm";
        JSONObject jsonParm = new JSONObject();
        jsonParm.put("Action", "Encrypt");
        jsonParm.put("DeviceType", "SCM");
        JSONObject targetJson = new JSONObject();
        targetJson.put("TimeStamp", String.valueOf(System.currentTimeMillis()));
        targetJson.put("Token", getToken());
        targetJson.put("Algorithm", "SM4");
        targetJson.put("Sm4Mode", "CBC");
        targetJson.put("Sm4IV", sm4Iv);
        targetJson.put("KeyIndex", keyIndex);
        targetJson.put("Message", message);
        jsonParm.put("Target", targetJson);
        return apiRequest(url, jsonParm.toJSONString());
    }
    /**
     * 解密
     *
     * @param sm4Iv    算法为SM4时需要填写,16字节字符串
     * @param keyIndex 密钥
     * @param message  待解密信息
     * @return base64后的解密信息
     */
    public ResultDTO getDecrypt(String sm4Iv, String keyIndex, String message) {
        String url = urlPrefix + "/api/Http/scm";
        JSONObject jsonParm = new JSONObject();
        jsonParm.put("Action", "Decrypt");
        jsonParm.put("DeviceType", "SCM");
        JSONObject targetJson = new JSONObject();
        targetJson.put("TimeStamp", String.valueOf(System.currentTimeMillis()));
        targetJson.put("Token", getToken());
        targetJson.put("Algorithm", "SM4");
        targetJson.put("Sm4Mode", "CBC");
        targetJson.put("Sm4IV", sm4Iv);
        targetJson.put("KeyIndex", keyIndex);
        targetJson.put("MessageCode", "base64");
        targetJson.put("Message", message);
        jsonParm.put("Target", targetJson);
        return apiRequest(url, jsonParm.toJSONString());
    }
    /**
     * 随机产生长度为16的字节数组并Base64编码
     *
     * @return Sm4IV
     */
    public String getSm4Iv() {
        // Generate random byte array
        SecureRandom secureRandom = new SecureRandom();
        byte[] byteArray = new byte[16];
        secureRandom.nextBytes(byteArray);
        // Encode byte array using Base64
        String sm4IV = Base64.getEncoder().encodeToString(byteArray);
        return sm4IV;
    }
    public ResultDTO apiRequest(String url, String params) {
        logger.info("请求参数:" + params);
        // 声明一个header变量
        HttpHeaders headers = new HttpHeaders();
        // 设置为json格式
        MediaType mediaType = MediaType.parseMediaType("application/json;charset=utf-8");
        headers.setContentType(mediaType);
        HttpEntity<String> httpEntity = new HttpEntity(params, headers);
        RestTemplate template = new RestTemplate();
        ResultDTO resultDTO = template.postForObject(url, httpEntity, ResultDTO.class);
        logger.info("返回结果:" + JSONObject.toJSONString(resultDTO));
        return resultDTO;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/resources/application-dev.yml
New file
@@ -0,0 +1,38 @@
#服务器端口
server:
  port: 8120
#数据源配置
#spring:
#  datasource:
#    url: ${blade.datasource.dev.url}
#    username: ${blade.datasource.dev.username}
#    password: ${blade.datasource.dev.password}
#多数据源配置
spring:
  #排除DruidDataSourceAutoConfigure
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master
      primary: master
      datasource:
        ## 业务默认数据源
        master:
          url: ${blade.datasource.dev.url}
          username: ${blade.datasource.dev.username}
          password: ${blade.datasource.dev.password}
        ##中台数据源
        zt:
          url: ${blade.datasource.dev.zt.url}
          username: ${blade.datasource.dev.zt.username}
          password: ${blade.datasource.dev.zt.password}
  main:
    allow-circular-references: true
yunPwd:
  config:
    url-prefix: http://192.168.1.1
skjcmanager/skjcmanager-service/skjcmanager-pwd/src/main/resources/application-prod.yml
New file
@@ -0,0 +1,36 @@
#服务器端口
server:
  port: 8120
#数据源配置
#spring:
#  datasource:
#    url: ${blade.datasource.prod.url}
#    username: ${blade.datasource.prod.username}
#    password: ${blade.datasource.prod.password}
#多数据源配置
spring:
  #排除DruidDataSourceAutoConfigure
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master
      primary: master
      datasource:
        master:
          url: ${blade.datasource.prod.url}
          username: ${blade.datasource.prod.username}
          password: ${blade.datasource.prod.password}
        zt:
          url: ${blade.datasource.prod.zt.url}
          username: ${blade.datasource.prod.zt.username}
          password: ${blade.datasource.prod.zt.password}
  main:
    allow-circular-references: true
yunPwd:
  config:
    url-prefix: http://10.10.1.1
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -65,6 +65,12 @@
            <artifactId>skjcmanager-nky-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-sm/src/main/java/cn/gistack/sm/jcsb/controller/DangerReportController.java
@@ -65,7 +65,7 @@
    @PostMapping("/save")
    @ApiOperation(value = "新增", notes = "传入实体类参数")
    public R save(@RequestBody DangerReport dangerReport) {
        return R.data(dangerReportService.save(dangerReport));
        return R.data(dangerReportService.saveUp(dangerReport));
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/entity/DangerReport.java
@@ -12,7 +12,7 @@
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: 监测上报
 * @DESCRIPTION: 险情上报
 * @USER: aix
 * @DATE: 2023/5/18 17:39
 */
@@ -65,4 +65,10 @@
     */
    @ApiModelProperty("水库id")
    private String reservoirId;
    private String sm4iv;
    private String keyindexs;
    private String maced;
    private String encdata;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/service/IDangerReportService.java
@@ -1,8 +1,8 @@
package cn.gistack.sm.jcsb.service;
import cn.gistack.sm.jcsb.supo.DangerReportSUPO;
import cn.gistack.sm.jcsb.entity.DangerReport;
import cn.gistack.sm.jcsb.vo.DangerReportVO;
import cn.gistack.sm.jcsb.vo.DeviceReportVO;
import cn.gistack.sm.jcsb.vo.StatisticsVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
@@ -26,4 +26,7 @@
     * @return
     */
    StatisticsVO getStatistics(String resGuid);
    boolean saveUp(DangerReport dangerReport);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/service/impl/DangerReportServiceImpl.java
@@ -1,14 +1,22 @@
package cn.gistack.sm.jcsb.service.impl;
import cn.gistack.pwd.dto.CBCResultDTO;
import cn.gistack.pwd.dto.ResultDTO;
import cn.gistack.pwd.fegin.IPwdClient;
import cn.gistack.sm.jcsb.supo.DangerReportSUPO;
import cn.gistack.sm.jcsb.entity.DangerReport;
import cn.gistack.sm.jcsb.mapper.DangerReportMapper;
import cn.gistack.sm.jcsb.service.IDangerReportService;
import cn.gistack.sm.jcsb.vo.DangerReportVO;
import cn.gistack.sm.jcsb.vo.DeviceReportVO;
import cn.gistack.sm.jcsb.vo.StatisticsVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -20,6 +28,9 @@
 */
@Service
public class DangerReportServiceImpl extends BaseServiceImpl<DangerReportMapper, DangerReport> implements IDangerReportService {
    @Autowired
    private IPwdClient pwdClient;
    @Override
    public List<DangerReportVO> getAll(DangerReport dangerReport) {
@@ -35,4 +46,32 @@
    public StatisticsVO getStatistics(String resGuid) {
        return baseMapper.getStatistics(resGuid);
    }
    @Override
    @Transactional
    public boolean saveUp(DangerReport dangerReport) {
        this.save(dangerReport);
        DangerReportSUPO dangerReportSUPO = BeanUtil.copy(dangerReport, DangerReportSUPO.class);
        String message = JSONObject.toJSONString(dangerReportSUPO);
        R<CBCResultDTO> cbcResultDTOR =  pwdClient.getCBCMacEncipher(message);
        if (cbcResultDTOR.getCode() != 200) {
            return false;
        }
        String maced = cbcResultDTOR.getData().getMaced();
        String keyIndex = cbcResultDTOR.getData().getKeyIndex();
        String sm4iv = cbcResultDTOR.getData().getSm4IV();
        DangerReport ympo = new DangerReport();
        ympo.setId(dangerReport.getId());
        ympo.setMaced(maced);
        ympo.setKeyindexs(keyIndex);
        ympo.setSm4iv(sm4iv);
        R<ResultDTO> resultDTOR = pwdClient.getEncrypt(sm4iv, keyIndex, message);
        if (resultDTOR.getCode() != 200) {
            return false;
        }
        ympo.setEncdata(resultDTOR.getData().getData());
        return this.updateById(ympo);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/supo/DangerReportSUPO.java
New file
@@ -0,0 +1,56 @@
package cn.gistack.sm.jcsb.supo;
import cn.gistack.sm.jcsb.entity.DangerReport;
import lombok.Data;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import java.util.Date;
import java.util.Objects;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION: 加密超级类
 * @USER: aix
 * @DATE: 2023/8/14 14:59
 */
@Data
public class DangerReportSUPO extends BaseEntity {
    /**
     * 图片数组
     */
    private Object[] images;
    /**
     * 描述信息
     */
    private String desinfo;
    /**
     * 接收人
     */
    private String toUser;
    /**
     * 图片数组
     */
    private Object[] toImages;
    /**
     * 描述信息
     */
    private String toDesinfo;
    /**
     * 类型(0:险情上报)
     */
    private String type;
    /**
     * 水库id
     */
    private String reservoirId;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/jcsb/vo/DangerReportVO.java
@@ -19,4 +19,5 @@
     * 上报人
     */
    private String reportUser;
}