Browse Source

fix: 数据库密码加密

chenjianhua 2 months ago
parent
commit
ab115c952b

+ 5 - 1
pom.xml

@@ -141,7 +141,11 @@
                 <artifactId>hutool-crypto</artifactId>
                 <version>${hutool.version}</version>
             </dependency>
-
+            <dependency>
+                <groupId>com.github.ulisesbocchio</groupId>
+                <artifactId>jasypt-spring-boot-starter</artifactId>
+                <version>3.0.4</version>
+            </dependency>
             <!-- jjwt依赖包 -->
             <dependency>
                 <groupId>com.auth0</groupId>

+ 1 - 10
service-base/src/main/java/com/simuwang/base/config/DataSourceConfiguration.java

@@ -14,8 +14,6 @@ public class DataSourceConfiguration {
     public static final String DATA_DAQ_PROPERTIES = "spring.datasource.data-daq";
     public static final String DS_DATA_DAQ = "spring.datasource.data-daq.hikari";
 
-    @Value("${simuwang.token-secret}")
-    private String key;
     @Primary
     @Bean(name = DATA_DAQ_PROPERTIES)
     @ConfigurationProperties(prefix = DATA_DAQ_PROPERTIES)
@@ -27,13 +25,6 @@ public class DataSourceConfiguration {
     @Bean(name = DS_DATA_DAQ)
     @ConfigurationProperties(prefix = DS_DATA_DAQ)
     public HikariDataSource dataTrustDataSource() {
-        //密码解密
-        DataSourceProperties dataSourceProperties = daqDataSourceProperties();
-        String password=dataSourceProperties.getPassword();
-        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
-        textEncryptor.setPassword(key); // 用您自己的密钥替换"yourSecretKey"
-        String decryptPassword = textEncryptor.decrypt(password);
-        dataSourceProperties.setPassword(decryptPassword);
-        return dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
+        return daqDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
     }
 }

+ 17 - 9
service-deploy/pom.xml

@@ -23,7 +23,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.github.ulisesbocchio</groupId>
+            <artifactId>jasypt-spring-boot-starter</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.simuwang</groupId>
             <artifactId>service-base</artifactId>
@@ -58,6 +61,11 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.jasypt</groupId>
+            <artifactId>jasypt</artifactId>
+            <version>1.9.3</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
@@ -66,6 +74,14 @@
                 <artifactId>native-maven-plugin</artifactId>
             </plugin>
             <plugin>
+                <groupId>com.github.ulisesbocchio</groupId>
+                <artifactId>jasypt-maven-plugin</artifactId>
+                <version>3.0.5</version>
+                <configuration>
+                    <path>file:src/main/resources/application.yaml</path>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
@@ -73,14 +89,6 @@
                     <layout>JAR</layout> <!-- 可选,指定打包布局,默认为ZIP -->
                     <executable>true</executable> <!-- 使Jar可执行 -->
                     <includeSystemScope>true</includeSystemScope> <!-- 包括system范围内的依赖 -->
-<!--                    <assembly>-->
-<!--                        <descriptorRef>jar-with-dependencies</descriptorRef>-->
-<!--                        <archive>-->
-<!--                            <manifest>-->
-<!--                                <mainClass>com.simuwang.Application</mainClass> &lt;!&ndash; 再次指定主类 &ndash;&gt;-->
-<!--                            </manifest>-->
-<!--                        </archive>-->
-<!--                    </assembly>-->
                 </configuration>
                 <executions>
                     <execution>

+ 2 - 0
service-deploy/src/main/java/com/simuwang/Application.java

@@ -1,9 +1,11 @@
 package com.simuwang;
 
+import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
+@EnableEncryptableProperties
 @EnableTransactionManagement
 @SpringBootApplication
 public class Application {

+ 10 - 3
service-deploy/src/main/resources/application.yml

@@ -34,8 +34,8 @@ spring:
       type: com.zaxxer.hikari.HikariDataSource
       driver-class-name: dm.jdbc.driver.DmDriver
       url: jdbc:dm://192.168.1.39:5236/PPW_EMAIL
-      username: PPW_EMAIL
-      password: nRkHI1oCRiAOckoaB/VryURnEo98Iy7k
+      username: ENC(RcN9pifBXuL806UB95/zkLe+yqNtZ71YufzfoHu6G8I=)
+      password: ENC(AmbSttKkFiIk8vDK7T3w/Y42090McJYCfT9IJiHtylE=)
       # hikari连接池配置 对应 HikariConfig 配置属性类
       hikari:
         pool-name: HikariCP-daq
@@ -91,4 +91,11 @@ simuwang:
       filters: jwt
     - path: "/**"
       filters: jwt
-
+jasypt:
+  encryptor:
+    algorithm: PBEWithMD5AndDES
+    password: 123456qwertyasdfghzxcvbn
+    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
+    property:
+      prefix: ENC(
+      suffix: )

+ 157 - 135
service-deploy/src/test/java/com/simuwang/ApplicationTest.java

@@ -1,139 +1,161 @@
-//package com.simuwang;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.date.DateUtil;
-//import com.simuwang.base.common.conts.DateConst;
-//import com.simuwang.base.pojo.dto.MailboxInfoDTO;
-//import com.simuwang.daq.service.EmailParseApiService;
-//import com.simuwang.daq.service.EmailParseService;
-//import org.jasypt.util.text.BasicTextEncryptor;
-//import org.junit.jupiter.api.Test;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import java.io.File;
-//import java.util.*;
-//import java.util.List;
-//import java.util.regex.Matcher;
-//import java.util.regex.Pattern;
+package com.simuwang;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateUtil;
+import com.simuwang.base.common.conts.DateConst;
+import com.simuwang.base.pojo.dto.MailboxInfoDTO;
+import com.simuwang.daq.service.EmailParseApiService;
+import com.simuwang.daq.service.EmailParseService;
+import org.jasypt.encryption.StringEncryptor;
+import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
+import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
+import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.util.text.BasicTextEncryptor;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+@SpringBootTest(classes = Application.class)
+public class ApplicationTest {
+
+    @Autowired
+    private EmailParseService emailParseService;
+
+    @Autowired
+    private EmailParseApiService emailParseApiService;
+
+    @Test
+    public void test() {
+        MailboxInfoDTO emailInfoDTO = this.buildMailbox("", "");
 //
-//
-//@SpringBootTest(classes = Application.class)
-//public class ApplicationTest {
-//
-//    @Autowired
-//    private EmailParseService emailParseService;
-//
-//    @Autowired
-//    private EmailParseApiService emailParseApiService;
-//
-//    @Test
-//    public void test() {
-//        MailboxInfoDTO emailInfoDTO = this.buildMailbox("", "");
-////
-////        emailInfoDTO.setAccount("jjpj_test");
-////        emailInfoDTO.setPassword("shzq#919");
-////        emailInfoDTO.setHost("mail.shzq.com");
-////        emailInfoDTO.setPort("993");
-////        emailInfoDTO.setProtocol("imap");
-//
-//        Date startDate = DateUtil.parse("2024-10-10 15:00:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-//        Date endDate = DateUtil.parse("2024-10-10 16:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-//        try {
-//            emailParseService.parseEmail(emailInfoDTO, startDate, endDate);
-//        } catch (Exception e) {
-//            throw new RuntimeException(e);
-//        }
-//    }
-//
-//    @Test
-//    public void reportTest() {
-//        MailboxInfoDTO emailInfoDTO = this.buildMailbox("x", "x");
-//        Date startDate = DateUtil.parse("2024-10-15 15:10:30", DateConst.YYYY_MM_DD_HH_MM_SS);
-//        Date endDate = DateUtil.parse("2024-10-15 17:50:30", DateConst.YYYY_MM_DD_HH_MM_SS);
-//        try {
-//            emailParseService.parseEmail(emailInfoDTO, startDate, endDate);
-//        } catch (Exception e) {
-//            throw new RuntimeException(e);
-//        }
-//    }
-//
-//    @Test
-//    public void testReparseEmail() {
-//        String regexp = ".*【(.*?基金)】.*";
-//        String fileName = "【国恩回报61号私募证券投资基金】投资经理变更通知.pdf";
-//        Pattern pattern = Pattern.compile(regexp);
-//        Matcher matcher = pattern.matcher(fileName);
-//        if(matcher.find()){
-//            System.out.println(matcher.group(1));
-//        }
-//    }
-//
-//    @Test
-//    public void testReparseFile() {
-//        emailParseApiService.reparseFile(ListUtil.toList(40, 43));
-//    }
-//
-//    @Test
-//    public void testDateFormat() {
-//        String input = "Smppw@2024";
-//        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
-//        textEncryptor.setPassword("qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm12"); // 用您自己的密钥替换"yourSecretKey"
-//        String encryptedString = textEncryptor.encrypt(input);
-//        String decrypt = textEncryptor.decrypt(encryptedString);
-//        System.out.println("加密后的字符串为: " + encryptedString);
-//        System.out.println("解密后的字符串为: " + decrypt);
-//    }
-//
-//    private MailboxInfoDTO buildMailbox(String account, String pwd) {
-//        MailboxInfoDTO emailInfoDTO = new MailboxInfoDTO();
-//        emailInfoDTO.setUserId(1);
-//        emailInfoDTO.setAccount(account);
-//        emailInfoDTO.setPassword(pwd);
-//        emailInfoDTO.setHost("imap.exmail.qq.com");
+//        emailInfoDTO.setAccount("jjpj_test");
+//        emailInfoDTO.setPassword("shzq#919");
+//        emailInfoDTO.setHost("mail.shzq.com");
 //        emailInfoDTO.setPort("993");
 //        emailInfoDTO.setProtocol("imap");
-//        return emailInfoDTO;
-//    }
+
+        Date startDate = DateUtil.parse("2024-10-10 15:00:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date endDate = DateUtil.parse("2024-10-10 16:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        try {
+            emailParseService.parseEmail(emailInfoDTO, startDate, endDate);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Test
+    public void reportTest() {
+        MailboxInfoDTO emailInfoDTO = this.buildMailbox("x", "x");
+        Date startDate = DateUtil.parse("2024-10-15 15:10:30", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date endDate = DateUtil.parse("2024-10-15 17:50:30", DateConst.YYYY_MM_DD_HH_MM_SS);
+        try {
+            emailParseService.parseEmail(emailInfoDTO, startDate, endDate);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Test
+    public void testReparseEmail() {
+        String regexp = ".*【(.*?基金)】.*";
+        String fileName = "【国恩回报61号私募证券投资基金】投资经理变更通知.pdf";
+        Pattern pattern = Pattern.compile(regexp);
+        Matcher matcher = pattern.matcher(fileName);
+        if(matcher.find()){
+            System.out.println(matcher.group(1));
+        }
+    }
+
+    @Test
+    public void testReparseFile() {
+        emailParseApiService.reparseFile(ListUtil.toList(40, 43));
+    }
+
+    @Test
+    public void testDateFormat() {
+        String input = "Smppw@2024";
+        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
+        textEncryptor.setPassword("qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm12"); // 用您自己的密钥替换"yourSecretKey"
+        String encryptedString = textEncryptor.encrypt(input);
+        String decrypt = textEncryptor.decrypt(encryptedString);
+        System.out.println("加密后的字符串为: " + encryptedString);
+        System.out.println("解密后的字符串为: " + decrypt);
+    }
+
+    private MailboxInfoDTO buildMailbox(String account, String pwd) {
+        MailboxInfoDTO emailInfoDTO = new MailboxInfoDTO();
+        emailInfoDTO.setUserId(1);
+        emailInfoDTO.setAccount(account);
+        emailInfoDTO.setPassword(pwd);
+        emailInfoDTO.setHost("imap.exmail.qq.com");
+        emailInfoDTO.setPort("993");
+        emailInfoDTO.setProtocol("imap");
+        return emailInfoDTO;
+    }
 //
-//
-//    /**
-//     * 得到文件名称
-//     *
-//     * @param path 路径
-//     * @return {@link List}<{@link String}>
-//     */
-//    private static List<String> getFileNames(String path) {
-//        File file = new File(path);
-//        if (!file.exists()) {
-//            return null;
-//        }
-//        List<String> fileNames = new ArrayList<>();
-//        return getFileNames(file, fileNames);
-//    }
-//
-//    /**
-//     * 得到文件名称
-//     *
-//     * @param file      文件
-//     * @param fileNames 文件名
-//     * @return {@link List}<{@link String}>
-//     */
-//    private static List<String> getFileNames(File file, List<String> fileNames) {
-//        File[] files = file.listFiles();
-//        for (File f : files) {
-//            if (f.isDirectory()) {
-//                getFileNames(f, fileNames);
-//            } else {
-//                fileNames.add(f.getName());
-//            }
-//        }
-//        return fileNames;
-//    }
-//
-//    public static int getPercent2(float h, float w) {
-//        int p = 0;
-//        float p2 = 0.0f;
-//        p2 = 450 / w * 100;
-//        p = Math.round(p2);
-//        return p;
-//    }
-//}
+//    @Autowired
+//    private StringEncryptor stringEncryptor;
+
+    @Test
+    public void encrypt() {
+        StandardPBEStringEncryptor stringEncryptor = new StandardPBEStringEncryptor();
+        stringEncryptor.setAlgorithm("PBEWithMD5AndDES");
+        stringEncryptor.setPassword("123456qwertyasdfghzxcvbn");
+        stringEncryptor.setIvGenerator(new RandomIvGenerator());
+        String name = stringEncryptor.encrypt("PPW_EMAIL");
+        String password = stringEncryptor.encrypt("Dmppw2024");
+        System.out.println("database username: " + name);
+        System.out.println("database password: " + password);
+    }
+
+
+
+    /**
+     * 得到文件名称
+     *
+     * @param path 路径
+     * @return {@link List}<{@link String}>
+     */
+    private static List<String> getFileNames(String path) {
+        File file = new File(path);
+        if (!file.exists()) {
+            return null;
+        }
+        List<String> fileNames = new ArrayList<>();
+        return getFileNames(file, fileNames);
+    }
+
+    /**
+     * 得到文件名称
+     *
+     * @param file      文件
+     * @param fileNames 文件名
+     * @return {@link List}<{@link String}>
+     */
+    private static List<String> getFileNames(File file, List<String> fileNames) {
+        File[] files = file.listFiles();
+        for (File f : files) {
+            if (f.isDirectory()) {
+                getFileNames(f, fileNames);
+            } else {
+                fileNames.add(f.getName());
+            }
+        }
+        return fileNames;
+    }
+
+    public static int getPercent2(float h, float w) {
+        int p = 0;
+        float p2 = 0.0f;
+        p2 = 450 / w * 100;
+        p = Math.round(p2);
+        return p;
+    }
+}