pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-company/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/utils/AliyunCloudAuthUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -43,6 +43,7 @@ <spring-framework.version>5.3.39</spring-framework.version> <fastexcel.version>1.0.0</fastexcel.version> <aliyun-oss.version>3.17.4</aliyun-oss.version> <aliyun-cloudauth.version>3.4.1</aliyun-cloudauth.version> </properties> <!-- 依赖声明 --> @@ -325,7 +326,11 @@ <version>${aliyun-oss.version}</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>cloudauth20190307</artifactId> <version>${aliyun-cloudauth.version}</version> </dependency> </dependencies> </dependencyManagement> ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -26,7 +26,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -69,7 +68,7 @@ } @Operation(summary = "管理端-修改密码") @GetMapping("/modify-pwd") @PostMapping("/modify-pwd") public R<?> modifyPwd(@Valid @RequestBody MgtPasswordDTO dto) { try { sysLoginService.modifyPwd(dto); ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -264,7 +264,7 @@ if (Objects.isNull(sysUser)){ throw new ServiceException("用户不存在"); } if (!SecurityUtils.matchesPassword(SecurityUtils.encryptPassword(dto.getOldPassword()), sysUser.getPassword())){ if (!SecurityUtils.matchesPassword(dto.getOldPassword(), sysUser.getPassword())){ throw new ServiceException("原密码错误"); } sysUser.setPassword(SecurityUtils.encryptPassword(dto.getNewPassword())); ruoyi-modules/ruoyi-company/pom.xml
@@ -93,12 +93,15 @@ <artifactId>ocr_api20210707</artifactId> </dependency> <dependency> <groupId>cn.idev.excel</groupId> <artifactId>fastexcel</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>cloudauth20190307</artifactId> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
@@ -17,6 +17,7 @@ import com.ruoyi.company.mapper.CompanyMapper; import com.ruoyi.company.service.CompanyService; import com.ruoyi.company.service.UserService; import com.ruoyi.company.utils.AliyunCloudAuthUtil; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -33,6 +34,7 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyService { private final UserService userService; private final HttpServletResponse response; private final AliyunCloudAuthUtil aliyunCloudAuthUtil; /** * 获取企业列表 * @param query @@ -41,12 +43,22 @@ @Override public PageDTO<MgtCompanyVO> queryPage(MgtCompanyQuery query) { Page<Company> page = this.lambdaQuery() .like(StringUtils.isNotBlank(query.getCompanyInfo()), Company::getCompanyName, query.getCompanyInfo()) .like(StringUtils.isNotBlank(query.getCompanyInfo()), Company::getSocialCode, query.getCompanyInfo()) .like(StringUtils.isNotBlank(query.getLegalPersonInfo()), Company::getLegalPersonName, query.getLegalPersonInfo()) .like(StringUtils.isNotBlank(query.getLegalPersonInfo()), Company::getIdCardNumber, query.getLegalPersonInfo()) .like(StringUtils.isNotBlank(query.getContactInfo()), Company::getContactName, query.getContactInfo()) .like(StringUtils.isNotBlank(query.getContactInfo()), Company::getContactPhone, query.getContactInfo()) .and(StringUtils.isNotBlank(query.getCompanyInfo()), queryWrapper -> queryWrapper .like(Company::getCompanyName, query.getCompanyInfo()) .or() .like(Company::getSocialCode, query.getCompanyInfo())) .and(StringUtils.isNotBlank(query.getLegalPersonInfo()), queryWrapper -> queryWrapper .like(Company::getLegalPersonName, query.getLegalPersonInfo()) .or() .like(Company::getIdCardNumber, query.getLegalPersonInfo())) .and(StringUtils.isNotBlank(query.getContactInfo()), queryWrapper -> queryWrapper .like(Company::getContactName, query.getContactInfo()) .or() .like(Company::getContactPhone, query.getContactInfo())) .orderByDesc(Company::getCreateTime) .page(new Page<>(query.getPageCurr(), query.getPageSize())); return PageDTO.of(page,MgtCompanyVO.class); } @@ -88,13 +100,18 @@ User user = BeanUtils.copyBean(dto, User.class); user.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); userService.save(user); // TODO 校验身份证信息 Company company = BeanUtils.copyBean(dto, Company.class); company.setUserId(user.getUserId()); //根据公司名称查询数据库 Long count = this.lambdaQuery().eq(Company::getCompanyName, company.getCompanyName()).count(); if (count > 0) { throw new ServiceException("该公司账号已存在"); } //身份证二要素校验 Boolean res = aliyunCloudAuthUtil.verifyIdCard(dto.getLegalPersonName(), dto.getIdCardNumber()); if (!res) { throw new ServiceException("身份证信息不匹配"); } this.save(company); } @@ -133,6 +150,11 @@ if (count > 0) { throw new ServiceException("该公司账号已存在"); } //身份证二要素校验 Boolean res = aliyunCloudAuthUtil.verifyIdCard(dto.getLegalPersonName(), dto.getIdCardNumber()); if (!res) { throw new ServiceException("身份证信息不匹配"); } Company companyUpd = BeanUtils.copyBean(dto, Company.class); companyUpd.setId(company.getId()); this.updateById(companyUpd); ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/utils/AliyunCloudAuthUtil.java
New file @@ -0,0 +1,80 @@ package com.ruoyi.company.utils; import cn.hutool.crypto.digest.DigestUtil; import com.alibaba.fastjson2.JSONObject; import com.aliyun.cloudauth20190307.Client; import com.aliyun.cloudauth20190307.models.Id2MetaVerifyResponse; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @author mitao * @date 2025/1/21 */ @Slf4j @Component public class AliyunCloudAuthUtil { @Value("aliyun.accessKeyId") private String accessKeyId; @Value("aliyun.accessKeySecret") private String accessKeySecret; private Client createClient() throws Exception { // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 Config config = new com.aliyun.teaopenapi.models.Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(accessKeyId) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(accessKeySecret); // Endpoint 请参考 https://api.aliyun.com/product/Cloudauth config.endpoint = "cloudauth.aliyuncs.com"; return new Client(config); } public Boolean verifyIdCard(String userName,String idCardNo) { //姓名第一个字密文+ 姓名其他部分明文。 String firstCharacter = userName.substring(0, 1); userName = DigestUtil.md5Hex(firstCharacter)+userName.substring(1); log.info("姓名:"+userName); //身份证号前6位(明文)+出生年月日(密文)+身份证号后4位(明文)。 idCardNo = idCardNo.substring(0,6)+ DigestUtil.md5Hex(idCardNo.substring(6, 14)) +idCardNo.substring(14); log.info("身份证号:"+idCardNo); Client client = null; try { client = createClient(); } catch (Exception e) { throw new RuntimeException(e); } com.aliyun.cloudauth20190307.models.Id2MetaVerifyRequest id2MetaVerifyRequest = new com.aliyun.cloudauth20190307.models.Id2MetaVerifyRequest() .setParamType("md5") .setUserName(userName) .setIdentifyNum(idCardNo); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 Id2MetaVerifyResponse id2MetaVerifyResponse = client.id2MetaVerifyWithOptions(id2MetaVerifyRequest, runtime); log.info(JSONObject.toJSONString(id2MetaVerifyResponse)); if (id2MetaVerifyResponse.getStatusCode().equals(200) && ("1").equals(id2MetaVerifyResponse.getBody().getResultObject().getBizCode())) { return true; } } catch (TeaException error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); // 诊断地址 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); // 诊断地址 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } return false; } }