From 8229b3e44e60a4a4b6cb5bdc8eb8e0374942ff8d Mon Sep 17 00:00:00 2001 From: waner Date: Thu, 7 May 2026 17:28:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=AF=81=E4=B9=A6=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tms/modules/cert/controller/CrlController.java | 6 +++--- .../com/cisd/tms/modules/cert/dto/Subject.java | 13 +------------ .../tms/modules/cert/repository/CrlRepository.java | 2 ++ .../cert/repository/impl/CrlRepositoryImpl.java | 10 ++++++++++ .../cisd/tms/modules/cert/service/CrlService.java | 7 +++---- .../cert/controller/CertSwaggerAnnotationTest.java | 7 +++++++ .../tms/modules/cert/service/CrlServiceTest.java | 14 ++++++++------ .../modules/cert/service/EntityServiceTest.java | 2 +- 8 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/cisd/tms/modules/cert/controller/CrlController.java b/src/main/java/com/cisd/tms/modules/cert/controller/CrlController.java index a91613d..f36f4bd 100644 --- a/src/main/java/com/cisd/tms/modules/cert/controller/CrlController.java +++ b/src/main/java/com/cisd/tms/modules/cert/controller/CrlController.java @@ -28,7 +28,7 @@ import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/api/v1/crls") -@Tag(name = "CRL管理", description = "证书吊销列表导入、吊销明细查询和 CRL 删除接口") +@Tag(name = "CRL管理", description = "证书吊销列表导入、吊销明细查询和吊销明细删除接口") public class CrlController { private final CrlService crlService; @@ -64,9 +64,9 @@ public class CrlController { } @PostMapping("/delete") - @Operation(summary = "删除CRL", description = "根据 CRL ID 删除 CRL 元数据及其吊销明细。删除后对应吊销记录不再参与证书运行状态判断。") + @Operation(summary = "删除CRL吊销明细", description = "根据 CRL 吊销明细 ID 删除单条吊销记录。删除后该吊销记录不再参与证书运行状态判断,CRL 元数据和同一 CRL 下的其他明细不会被删除。") @ReplayProtected - @AuditedOperation(module = ModuleCode.KEY, action = ActionType.DELETE, summary = "删除证书吊销列表") + @AuditedOperation(module = ModuleCode.KEY, action = ActionType.DELETE, summary = "删除证书吊销明细") @RequireInternalAuth(role = RoleCode.KEY_ADMIN, authLevel = AuthLevel.FULL) public ApiResponse delete(@Valid @RequestBody IdRequest request) { crlService.delete(request.getId()); diff --git a/src/main/java/com/cisd/tms/modules/cert/dto/Subject.java b/src/main/java/com/cisd/tms/modules/cert/dto/Subject.java index 5a45405..a534710 100644 --- a/src/main/java/com/cisd/tms/modules/cert/dto/Subject.java +++ b/src/main/java/com/cisd/tms/modules/cert/dto/Subject.java @@ -30,16 +30,9 @@ public class Subject { @Schema(description = "组织 O", example = "CISD") private String org; - @Schema(description = "组织单元 OU", example = "Cert") - private String orgUnit; - - @Schema(description = "组织单元 OU 列表,最多支持两个;传入后优先于 orgUnit", example = "[\"Organizational-1\",\"CCFCCB\"]") + @Schema(description = "组织单元 OU 列表,最多支持两个", example = "[\"Organizational-1\",\"CCFCCB\"]") private List orgUnits; - public String getDN() { - return toX500Name().toString(); - } - public X500Name toX500Name() { Assert.hasText(commonName, "通用名称不能为空"); X500NameBuilder builder = new X500NameBuilder(BCStyle.INSTANCE); @@ -74,9 +67,6 @@ public class Subject { } } } - if (units.isEmpty() && StringUtils.hasText(orgUnit)) { - units.add(orgUnit.trim()); - } Assert.isTrue(units.size() <= 2, "组织单元最多支持2个"); return units; } @@ -108,7 +98,6 @@ public class Subject { } } if (!orgUnits.isEmpty()) { - subject.setOrgUnit(orgUnits.get(0)); subject.setOrgUnits(orgUnits); } Assert.hasText(subject.commonName, "通用名称不能为空"); diff --git a/src/main/java/com/cisd/tms/modules/cert/repository/CrlRepository.java b/src/main/java/com/cisd/tms/modules/cert/repository/CrlRepository.java index a03c8d7..6545f29 100644 --- a/src/main/java/com/cisd/tms/modules/cert/repository/CrlRepository.java +++ b/src/main/java/com/cisd/tms/modules/cert/repository/CrlRepository.java @@ -22,6 +22,8 @@ public interface CrlRepository { Optional findCrlById(Long id); Optional findCrlByFingerprint(String fingerprint); void deleteCrlById(Long id); + Optional findRevokedById(Long id); + void deleteRevokedById(Long id); void deleteRevokedByCrlId(Long crlId); Page pageRevoked(CrlListRequest request); boolean existsRevoked(String issuerDn, String serialNumber); diff --git a/src/main/java/com/cisd/tms/modules/cert/repository/impl/CrlRepositoryImpl.java b/src/main/java/com/cisd/tms/modules/cert/repository/impl/CrlRepositoryImpl.java index 03dfea3..c4d277e 100644 --- a/src/main/java/com/cisd/tms/modules/cert/repository/impl/CrlRepositoryImpl.java +++ b/src/main/java/com/cisd/tms/modules/cert/repository/impl/CrlRepositoryImpl.java @@ -123,6 +123,16 @@ public class CrlRepositoryImpl implements CrlRepository { crlMapper.deleteById(id); } + @Override + public Optional findRevokedById(Long id) { + return Optional.ofNullable(revokedMapper.selectById(id)); + } + + @Override + public void deleteRevokedById(Long id) { + revokedMapper.deleteById(id); + } + @Override public void deleteRevokedByCrlId(Long crlId) { revokedMapper.delete(new LambdaQueryWrapper() diff --git a/src/main/java/com/cisd/tms/modules/cert/service/CrlService.java b/src/main/java/com/cisd/tms/modules/cert/service/CrlService.java index 3c63df8..1e66675 100644 --- a/src/main/java/com/cisd/tms/modules/cert/service/CrlService.java +++ b/src/main/java/com/cisd/tms/modules/cert/service/CrlService.java @@ -300,10 +300,9 @@ public class CrlService { @Transactional public void delete(Long id) { - crlRepository.findCrlById(id) - .orElseThrow(() -> new BizException(ErrorCode.BAD_REQUEST.getCode(), "CRL不存在")); - crlRepository.deleteRevokedByCrlId(id); - crlRepository.deleteCrlById(id); + crlRepository.findRevokedById(id) + .orElseThrow(() -> new BizException(ErrorCode.BAD_REQUEST.getCode(), "CRL吊销明细不存在")); + crlRepository.deleteRevokedById(id); } private int saveRevokedRows( diff --git a/src/test/java/com/cisd/tms/modules/cert/controller/CertSwaggerAnnotationTest.java b/src/test/java/com/cisd/tms/modules/cert/controller/CertSwaggerAnnotationTest.java index 6ad4852..574dcec 100644 --- a/src/test/java/com/cisd/tms/modules/cert/controller/CertSwaggerAnnotationTest.java +++ b/src/test/java/com/cisd/tms/modules/cert/controller/CertSwaggerAnnotationTest.java @@ -38,6 +38,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; class CertSwaggerAnnotationTest { @@ -108,4 +109,10 @@ class CertSwaggerAnnotationTest { } } } + + @Test + void subjectDtoShouldOnlyExposeOrgUnitsForOuValues() throws Exception { + assertThrows(NoSuchFieldException.class, () -> Subject.class.getDeclaredField("orgUnit")); + assertNotNull(Subject.class.getDeclaredField("orgUnits")); + } } diff --git a/src/test/java/com/cisd/tms/modules/cert/service/CrlServiceTest.java b/src/test/java/com/cisd/tms/modules/cert/service/CrlServiceTest.java index f3ca30e..a9afe91 100644 --- a/src/test/java/com/cisd/tms/modules/cert/service/CrlServiceTest.java +++ b/src/test/java/com/cisd/tms/modules/cert/service/CrlServiceTest.java @@ -453,17 +453,19 @@ class CrlServiceTest { } @Test - void shouldDeleteCrlMetadataAndRevokedRows() { + void shouldDeleteRevokedDetailByIdWithoutDeletingCrlMetadata() { CrlRepository crlRepository = Mockito.mock(CrlRepository.class); CrlService service = new CrlService(crlRepository, Mockito.mock(CertificateRepository.class), Mockito.mock(TrustedCertService.class)); - CertificateCrlEntity crl = new CertificateCrlEntity(); - crl.setId(99L); - Mockito.when(crlRepository.findCrlById(99L)).thenReturn(Optional.of(crl)); + CertificateCrlRevokedEntity revoked = new CertificateCrlRevokedEntity(); + revoked.setId(99L); + revoked.setCrlId(10L); + Mockito.when(crlRepository.findRevokedById(99L)).thenReturn(Optional.of(revoked)); service.delete(99L); - Mockito.verify(crlRepository).deleteRevokedByCrlId(99L); - Mockito.verify(crlRepository).deleteCrlById(99L); + Mockito.verify(crlRepository).deleteRevokedById(99L); + Mockito.verify(crlRepository, Mockito.never()).deleteRevokedByCrlId(Mockito.anyLong()); + Mockito.verify(crlRepository, Mockito.never()).deleteCrlById(Mockito.anyLong()); } private KeyPair sm2KeyPair() throws Exception { diff --git a/src/test/java/com/cisd/tms/modules/cert/service/EntityServiceTest.java b/src/test/java/com/cisd/tms/modules/cert/service/EntityServiceTest.java index ffe1617..4fb16e2 100644 --- a/src/test/java/com/cisd/tms/modules/cert/service/EntityServiceTest.java +++ b/src/test/java/com/cisd/tms/modules/cert/service/EntityServiceTest.java @@ -303,7 +303,7 @@ class EntityServiceTest { private EntityGenP10Request genP10Request(String commonName) { Subject subject = new Subject(); subject.setCommonName(commonName); - subject.setOrgUnit("Cert"); + subject.setOrgUnits(List.of("Cert")); subject.setOrg("CISD"); subject.setCity("南南市"); subject.setProvince("陕西省");