diff --git a/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/CommonCertUtils.java b/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/CommonCertUtils.java index 20a3322..a611303 100644 --- a/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/CommonCertUtils.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/CommonCertUtils.java @@ -67,7 +67,8 @@ public class CommonCertUtils extends GMBaseUtil { } public static PKCS10CertificationRequest createCSR(X500Name subject, BCECPublicKey pubKey, PrivateKey priKey) throws OperatorCreationException { - PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(subject, pubKey); + SM2PublicKey sm2SubPub = new SM2PublicKey(pubKey.getAlgorithm(), pubKey); + PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(subject, sm2SubPub); ContentSigner signerBuilder = new JcaContentSignerBuilder("SM3withSM2") .setProvider(BouncyCastleProvider.PROVIDER_NAME).build(priKey); return csrBuilder.build(signerBuilder); diff --git a/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/SM2PublicKey.java b/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/SM2PublicKey.java new file mode 100644 index 0000000..1433f04 --- /dev/null +++ b/chsm-common/src/main/java/com/sunyard/chsm/utils/gm/cert/SM2PublicKey.java @@ -0,0 +1,44 @@ +package com.sunyard.chsm.utils.gm.cert; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x9.X9ECPoint; +import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; +import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey; +import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil; + +public class SM2PublicKey extends BCECPublicKey { + public static final ASN1ObjectIdentifier ID_SM2_PUBKEY_PARAM = new ASN1ObjectIdentifier("1.2.156.10197.1.301"); + + private boolean withCompression; + + public SM2PublicKey(BCECPublicKey key) { + super(key.getAlgorithm(), key); + this.withCompression = false; + } + + public SM2PublicKey(String algorithm, BCECPublicKey key) { + super(algorithm, key); + this.withCompression = false; + } + + @Override + public byte[] getEncoded() { + ASN1OctetString p = ASN1OctetString.getInstance( + new X9ECPoint(getQ(), withCompression).toASN1Primitive()); + + // stored curve is null if ImplicitlyCa + SubjectPublicKeyInfo info = new SubjectPublicKeyInfo( + new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, ID_SM2_PUBKEY_PARAM), + p.getOctets()); + + return KeyUtil.getEncodedSubjectPublicKeyInfo(info); + } + + @Override + public void setPointFormat(String style) { + withCompression = !("UNCOMPRESSED".equalsIgnoreCase(style)); + } +} diff --git a/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/controller/ScUserController.java b/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/controller/ScUserController.java index 59de586..6420287 100644 --- a/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/controller/ScUserController.java +++ b/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/controller/ScUserController.java @@ -27,10 +27,12 @@ import com.sunyard.ssp.utils.PageUtil; import com.sunyard.ssp.utils.ResultUtil; import com.sunyard.ssp.utils.SecurityUtil; import com.sunyard.ssp.utils.UsernameUtil; +import com.sunyard.ssp.vo.ScUserVo; import com.sunyard.ssp.vo.SearchVo; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -444,9 +446,11 @@ public class ScUserController { @RequestMapping(value = "/admin/add", method = RequestMethod.POST) @ApiOperation(value = "添加用户") - public Result regist(@ModelAttribute("user") @Validated ScUser u, + public Result regist(@ModelAttribute("user") @Validated ScUserVo uv, @RequestParam(required = false) Long[] roleIds) { try { + ScUser u = new ScUser(); + BeanUtils.copyProperties(uv, u); u.setPassUpdateTime(LocalDateTime.now()); userService.regist(u, roleIds); } catch (Exception e) { @@ -457,16 +461,18 @@ public class ScUserController { @RequestMapping(value = "/admin/init", method = RequestMethod.POST) @ApiOperation(value = "初始化admin") - public Result init(@ModelAttribute("user") @Validated ScUser u, + public Result init(@ModelAttribute("user") @Validated ScUserVo uv, @RequestParam(required = false) Long[] roleIds) { try { + ScUser u = new ScUser(); + BeanUtils.copyProperties(uv, u); u.setPassUpdateTime(LocalDateTime.now()); userService.regist(u, roleIds); + return new ResultUtil().setData(u.getId(),"添加成功"); } catch (Exception e) { userService.remove(new QueryWrapper<>()); return new ResultUtil().setErrorMsg(e.getMessage()); } - return new ResultUtil().setData(u.getId(),"添加成功"); } @RequestMapping(value = "/admin/disable/{userId}", method = RequestMethod.POST) diff --git a/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/utils/validator/UserValidator.java b/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/utils/validator/UserValidator.java index e9a39b6..b04f90b 100644 --- a/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/utils/validator/UserValidator.java +++ b/chsm-web-manage/src/main/java/com/sunyard/ssp/modules/user/utils/validator/UserValidator.java @@ -3,7 +3,9 @@ package com.sunyard.ssp.modules.user.utils.validator; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.sunyard.ssp.modules.user.entity.ScUser; import com.sunyard.ssp.modules.user.service.IScUserService; +import com.sunyard.ssp.vo.ScUserVo; import lombok.SneakyThrows; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; @@ -26,13 +28,19 @@ public class UserValidator implements Validator { @Override public boolean supports(Class aClass) { - return ScUser.class.equals(aClass); + return ScUser.class.equals(aClass) || ScUserVo.class.equals(aClass); } @SneakyThrows @Override public void validate(Object o, Errors errors) { - ScUser user = (ScUser) o; + ScUser user; + if (o instanceof ScUserVo) { + user = new ScUser(); + BeanUtils.copyProperties(o, user); + } else { + user = (ScUser) o; + } if (user.getId() != null) { //编辑 ScUser origin = userService.getById(user.getId()); diff --git a/chsm-web-manage/src/main/java/com/sunyard/ssp/vo/ScUserVo.java b/chsm-web-manage/src/main/java/com/sunyard/ssp/vo/ScUserVo.java new file mode 100644 index 0000000..b2a949e --- /dev/null +++ b/chsm-web-manage/src/main/java/com/sunyard/ssp/vo/ScUserVo.java @@ -0,0 +1,58 @@ +package com.sunyard.ssp.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author liulu + * @since 2024/11/15 + */ +@Data +public class ScUserVo { + private Long id; + + /** + * 用户名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 真实姓名 + */ + private String realname; + + /** + * 组织机构id + */ + private Long organizationId; + + /** + * 手机号 + */ + private String tel; + + /** + * 邮箱 + */ + private String email; + /** + * 状态:0:可用 1:不可用 + */ + private Integer status; + private Integer positionId; + private LocalDateTime updateTime; + private LocalDateTime passUpdateTime; + private Integer sex; + private String avatar; + private String uPublickey; + private String positionName; + private String departmentTitle; + + +}