ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdCard.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.api.model; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDate; @Data @Schema(description = "身份证信息") public class IdCard { @Schema(description = "姓名") private String name; @Schema(description = "性别") private String sex; @Schema(description = "身份证号码") private String idNumber; @Schema(description = "出生日期") private LocalDate birthDate; @Schema(description = "民族") private String ethnicity; @Schema(description = "地址") private String address; } ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -70,7 +70,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
@@ -197,7 +197,7 @@ if (r.getData() == null) { throw new ServiceException("账号不存在"); } if (!SecurityUtils.matchesPassword(password, r.getData().getPassword())) { if (!SecurityUtils.matchesPassword(r.getData().getPassword(), password)) { throw new ServiceException("密码错误"); } return r.getData(); ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java
@@ -1,13 +1,17 @@ package com.ruoyi.common.core.utils.orc; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest; import com.aliyun.ocr_api20210707.models.RecognizeAllTextResponse; import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaModel; import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; import com.ruoyi.common.core.utils.UrlDownloader; import java.io.InputStream; import java.util.Map; public class OcrUtils { @@ -34,7 +38,7 @@ /** * 证件识别 */ public static String idCard(InputStream bodyStream) throws Exception { public static JSONObject idCard(InputStream bodyStream) throws Exception { com.aliyun.ocr_api20210707.Client client = createClient(); // 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。 RecognizeAllTextRequest recognizeAllTextRequest = new RecognizeAllTextRequest() @@ -45,7 +49,21 @@ try { // 复制代码运行请自行打印 API 的返回值 RecognizeAllTextResponse recognizeAllTextResponse = client.recognizeAllTextWithOptions(recognizeAllTextRequest, runtime); System.out.println(com.aliyun.teautil.Common.toJSONString(TeaModel.buildMap(recognizeAllTextResponse))); String jsonString = Common.toJSONString(TeaModel.buildMap(recognizeAllTextResponse)); JSONObject jsonObject = JSONObject.parseObject(jsonString); Integer statusCode = jsonObject.getInteger("statusCode"); if (statusCode != 200) { throw new RuntimeException("识别失败"); } JSONObject body = jsonObject.getJSONObject("body"); JSONObject data = body.getJSONObject("Data"); JSONArray subImages = body.getJSONArray("SubImages"); if (subImages != null && !subImages.isEmpty()){ JSONObject subImage = subImages.getJSONObject(0); JSONObject kvInfo = subImage.getJSONObject("KvInfo"); return kvInfo.getJSONObject("Data"); } return null; } catch (TeaException error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -130,4 +130,12 @@ BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.matches(rawPassword, encodedPassword); } public static void main(String[] args) { String password1 = "$2a$10$qB8arbbFx4mevJzCOoChhebLS/ULjY7BCBNMNk9CoSJHAUM/Ixr2K"; for (int i = 0; i < 5; i++) { String password = encryptPassword("123"); System.out.println(matchesPassword("123",password1)); } } } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java
@@ -127,8 +127,7 @@ public R<Void> updatePassword(@RequestBody UpdatePassword updatePassword) { AppUser appLoginUser = SecurityUtils.getAppLoginUser(); User user = userService.getById(appLoginUser.getUserId()); String oldPassword = SecurityUtils.encryptPassword(updatePassword.getOldPassword()); if (!user.getPassword().equals(oldPassword)) { if (!SecurityUtils.matchesPassword(updatePassword.getOldPassword(), user.getPassword())) { return R.fail("旧密码错误"); } if (!updatePassword.getNewPassword().equals(updatePassword.getConfirmPassword())){ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CommonController.java
New file @@ -0,0 +1,34 @@ package com.ruoyi.system.controller; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.UrlDownloader; import com.ruoyi.common.core.utils.orc.OcrUtils; import com.ruoyi.system.api.model.IdCard; import io.swagger.v3.oas.annotations.Parameter; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.InputStream; @RestController @RequestMapping("/common") public class CommonController { /** * ocr提取身份证信息 */ @GetMapping("/idCard") public R<IdCard> idCard(@Parameter(name = "url", description = "图片地址") String url) { InputStream inputStream; try { inputStream = UrlDownloader.downloadAsStream(url); JSONObject jsonObject = OcrUtils.idCard(inputStream); IdCard idCard = JSONObject.parseObject(jsonObject.toJSONString(), IdCard.class); return R.ok(idCard); } catch (Exception e) { throw new RuntimeException(e); } } }