From 3f1e3b2970926c8dcffbeab144c1c0dab97844c4 Mon Sep 17 00:00:00 2001 From: wangzhibiao Date: Mon, 14 Sep 2026 13:55:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9F=B9=E8=AE=AD=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=A6=E5=91=98=E8=BA=AB=E4=BB=BD=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4=E7=BB=84=E4=BB=B6Spring=E6=9E=84=E9=80=A0=E5=99=A8?= =?UTF-8?q?=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JceStudentIdentityProtection.java | 2 ++ .../JceStudentIdentityProtectionTest.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/security/JceStudentIdentityProtection.java b/RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/security/JceStudentIdentityProtection.java index 7ecade7ff..6d7f6e01b 100644 --- a/RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/security/JceStudentIdentityProtection.java +++ b/RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/security/JceStudentIdentityProtection.java @@ -10,6 +10,7 @@ import javax.crypto.Cipher; import javax.crypto.Mac; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -34,6 +35,7 @@ public class JceStudentIdentityProtection implements StudentIdentityProtection private final byte[] hashKey; private final SecureRandom secureRandom; + @Autowired public JceStudentIdentityProtection( @Value("${train.student.identity.encryption-key:}") String encryptionKeyBase64, @Value("${train.student.identity.hash-key:}") String hashKeyBase64) diff --git a/RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/security/JceStudentIdentityProtectionTest.java b/RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/security/JceStudentIdentityProtectionTest.java index b2121aada..e54e8bc63 100644 --- a/RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/security/JceStudentIdentityProtectionTest.java +++ b/RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/security/JceStudentIdentityProtectionTest.java @@ -3,11 +3,16 @@ package com.ruoyi.train.security; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; import java.util.Arrays; import java.util.Base64; +import java.util.HashMap; +import java.util.Map; import org.junit.Before; import org.junit.Test; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.core.env.MapPropertySource; /** 身份证加密、确定性查重与脱敏规则单元测试。 */ public class JceStudentIdentityProtectionTest @@ -77,4 +82,28 @@ public class JceStudentIdentityProtectionTest new JceStudentIdentityProtection(Base64.getEncoder().encodeToString(new byte[32]), Base64.getEncoder().encodeToString(new byte[16])); } + + @Test + public void shouldInstantiateAsSpringBeanWithExplicitAutowiredConstructor() + { + byte[] testEncKey = new byte[32]; + byte[] testHashKey = new byte[32]; + Arrays.fill(testEncKey, (byte) 0x11); + Arrays.fill(testHashKey, (byte) 0x22); + + Map properties = new HashMap<>(); + properties.put("train.student.identity.encryption-key", Base64.getEncoder().encodeToString(testEncKey)); + properties.put("train.student.identity.hash-key", Base64.getEncoder().encodeToString(testHashKey)); + + try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) + { + context.getEnvironment().getPropertySources().addFirst(new MapPropertySource("testProps", properties)); + context.register(JceStudentIdentityProtection.class); + context.refresh(); + + StudentIdentityProtection bean = context.getBean(StudentIdentityProtection.class); + assertNotNull("Spring 容器应通过显式 @Autowired 构造器成功实例化 Bean", bean); + assertEquals("110101********1234", bean.mask(ID_CARD)); + } + } }