完善代码

This commit is contained in:
cheney 2026-05-13 10:20:46 +08:00
parent b071c133ae
commit dc126e5812
4 changed files with 120 additions and 2 deletions

View File

@ -1,10 +1,15 @@
package com.cisd.tms.modules.openapi.service.controller; package com.cisd.tms.modules.openapi.service.controller;
import com.cisd.tms.common.api.ApiResponse; import com.cisd.tms.common.api.ApiResponse;
import com.cisd.tms.modules.cert.dto.ImportCertificateResponse;
import com.cisd.tms.modules.cert.service.CertificateService;
import com.cisd.tms.modules.openapi.service.dto.DettachedSignRequest;
import com.cisd.tms.modules.openapi.service.dto.DettachedVerifyRequest;
import com.cisd.tms.modules.openapi.service.dto.RawSignRequest; import com.cisd.tms.modules.openapi.service.dto.RawSignRequest;
import com.cisd.tms.modules.openapi.service.dto.RawSignResponse; import com.cisd.tms.modules.openapi.service.dto.RawSignResponse;
import com.cisd.tms.modules.openapi.service.dto.RawVerifyRequest; import com.cisd.tms.modules.openapi.service.dto.RawVerifyRequest;
import com.cisd.tms.modules.openapi.service.dto.RawVerifyResponse; import com.cisd.tms.modules.openapi.service.dto.RawVerifyResponse;
import com.cisd.tms.modules.openapi.service.dto.UploadCertRequest;
import com.cisd.tms.modules.openapi.service.impl.OpenApiService; import com.cisd.tms.modules.openapi.service.impl.OpenApiService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -28,12 +33,13 @@ public class OpenApiController {
private static final Logger log = LoggerFactory.getLogger(OpenApiController.class); private static final Logger log = LoggerFactory.getLogger(OpenApiController.class);
private final OpenApiService openApiService; private final OpenApiService openApiService;
private final CertificateService certificateService;
@PostMapping("/rawSign") @PostMapping("/rawSign")
@Operation(summary = "裸签名", description = "基于 SM3 SM2 算法进行签名,返回 Base64 编码的签名值") @Operation(summary = "裸签名", description = "基于 SM3 SM2 算法进行签名,返回 Base64 编码的签名值")
public ApiResponse<RawSignResponse> rawSign(@Valid @RequestBody RawSignRequest request) { public ApiResponse<RawSignResponse> rawSign(@Valid @RequestBody RawSignRequest request) {
log.info("收到裸签名请求, DN: {}", request.getDn()); log.info("收到裸签名请求, DN: {}, sessionId: {}", request.getDn(), request.getSessionId());
// 入参检查 // 入参检查
if (request.getOrigBytes() == null || request.getOrigBytes().trim().isEmpty()) { if (request.getOrigBytes() == null || request.getOrigBytes().trim().isEmpty()) {
@ -67,7 +73,7 @@ public class OpenApiController {
@PostMapping("/rawVerify") @PostMapping("/rawVerify")
@Operation(summary = "裸验签", description = "基于 SM3 SM2 算法进行验签,验证签名的有效性") @Operation(summary = "裸验签", description = "基于 SM3 SM2 算法进行验签,验证签名的有效性")
public ApiResponse<RawVerifyResponse> rawVerify(@Valid @RequestBody RawVerifyRequest request) { public ApiResponse<RawVerifyResponse> rawVerify(@Valid @RequestBody RawVerifyRequest request) {
log.info("收到裸验签请求, DN: {}", request.getDn()); log.info("收到裸验签请求, DN: {}, sessionId: {}", request.getDn(), request.getSessionId());
// 入参检查 // 入参检查
if (request.getOrigBytes() == null || request.getOrigBytes().trim().isEmpty()) { if (request.getOrigBytes() == null || request.getOrigBytes().trim().isEmpty()) {
@ -108,7 +114,72 @@ public class OpenApiController {
} }
} }
@PostMapping("/dettachedSign")
@Operation(summary = "分离签名", description = "基于 SM3 SM2 算法进行分离签名,返回 Base64 编码的签名值")
public ApiResponse<RawSignResponse> dettachedSign(@Valid @RequestBody DettachedSignRequest request) {
log.info("收到分离签名请求, DN: {}, sessionId: {}", request.getDn(), request.getSessionId());
RawSignRequest rawSignRequest = new RawSignRequest();
rawSignRequest.setDn(request.getDn());
rawSignRequest.setOrigBytes(request.getOrigBytes());
rawSignRequest.setSessionId(request.getSessionId());
return rawSign(rawSignRequest);
}
@PostMapping("/dettachedVerify")
@Operation(summary = "分离验签", description = "基于 SM3 SM2 算法进行分离验签,验证签名的有效性")
public ApiResponse<RawVerifyResponse> dettachedVerify(@Valid @RequestBody DettachedVerifyRequest request) {
log.info("收到分离验签请求, DN: {}, sessionId: {}", request.getDn(), request.getSessionId());
RawVerifyRequest rawVerifyRequest = new RawVerifyRequest();
rawVerifyRequest.setDn(request.getDn());
rawVerifyRequest.setOrigBytes(request.getOrigBytes());
rawVerifyRequest.setSignature(request.getSignature());
rawVerifyRequest.setSessionId(request.getSessionId());
return rawVerify(rawVerifyRequest);
}
@PostMapping("/dettachedVerifySimple")
@Operation(summary = "分离验签(简化版)", description = "基于 SM3 SM2 算法进行分离验签,验证签名的有效性(简化版)")
public ApiResponse<RawVerifyResponse> dettachedVerifySimple(@Valid @RequestBody DettachedVerifyRequest request) {
log.info("收到分离验签(简化版)请求, DN: {}, sessionId: {}", request.getDn(), request.getSessionId());
RawVerifyRequest rawVerifyRequest = new RawVerifyRequest();
rawVerifyRequest.setDn(request.getDn());
rawVerifyRequest.setOrigBytes(request.getOrigBytes());
rawVerifyRequest.setSignature(request.getSignature());
rawVerifyRequest.setSessionId(request.getSessionId());
return rawVerify(rawVerifyRequest);
}
@PostMapping("/uploadCert")
@Operation(summary = "上传证书", description = "上传并导入证书")
public ApiResponse<ImportCertificateResponse> uploadCert(@Valid @RequestBody UploadCertRequest request) {
log.info("收到上传证书请求, sessionId: {}", request.getSessionId());
if (request.getCertData() == null || request.getCertData().trim().isEmpty()) {
log.error("上传证书请求失败:证书数据为空");
return ApiResponse.fail(400, "证书数据不能为空", null);
}
try {
byte[] certBytes = Base64.getDecoder().decode(request.getCertData());
log.info("证书数据长度: {} bytes", certBytes.length);
ImportCertificateResponse response = certificateService.importCertificate(certBytes);
log.info("证书上传成功, certId: {}, subjectDn: {}", response.getCertId(), response.getSubjectDn());
return ApiResponse.success(response);
} catch (IllegalArgumentException e) {
log.error("上传证书请求参数错误: {}", e.getMessage());
return ApiResponse.fail(400, e.getMessage(), null);
} catch (Exception e) {
log.error("证书上传失败: {}", e.getMessage(), e);
return ApiResponse.fail(500, "证书上传失败: " + e.getMessage(), null);
}
}
} }

View File

@ -0,0 +1,20 @@
package com.cisd.tms.modules.openapi.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data
@Schema(description = "分离签名请求")
public class DettachedSignRequest {
@NotBlank(message = "证书DN不能为空")
@Schema(description = "证书DN", example = "CN=Initial Entity,OU=Initial OU,O=Initial Org,L=Beijing,ST=Beijing,C=CN")
private String dn;
@NotBlank(message = "待签名原文不能为空")
@Schema(description = "待签名原文的Base64编码", example = "dGVzdCBtZXNzYWdl")
private String origBytes;
@Schema(description = "会话ID", example = "session-12345")
private String sessionId;
}

View File

@ -0,0 +1,11 @@
package com.cisd.tms.modules.openapi.service.dto;
import lombok.Data;
@Data
public class DettachedVerifyRequest {
private String dn;
private String origBytes;
private String sessionId;
private String signature;
}

View File

@ -0,0 +1,16 @@
package com.cisd.tms.modules.openapi.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data
@Schema(description = "上传证书请求")
public class UploadCertRequest {
@NotBlank(message = "证书数据不能为空")
@Schema(description = "证书文件的Base64编码", example = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...")
private String certData;
@Schema(description = "会话ID", example = "session-12345")
private String sessionId;
}