From ec58bf197f4ea8e83105f3150133cab27a716a75 Mon Sep 17 00:00:00 2001 From: chuzhichao Date: Mon, 26 Jun 2023 18:44:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=89=8B=E6=9C=BA=E5=8F=B7?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=E3=80=81=E7=99=BB=E5=BD=95=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/AesCryptoUtils.java | 28 +++++++++++++++++++ .../com/ruoyi/common/utils/PhoneUtils.java | 14 ++++++++++ .../com/cyl/h5/service/H5MemberService.java | 14 ++++++++-- .../main/java/com/cyl/ums/domain/Member.java | 6 ++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/AesCryptoUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/PhoneUtils.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesCryptoUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesCryptoUtils.java new file mode 100644 index 0000000..e509e42 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AesCryptoUtils.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.utils; + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; + +/** + * aes加密工具 + */ +public class AesCryptoUtils { + + public static String encrypt(String key, String content){ + if (StringUtils.isBlank(key) || StringUtils.isBlank(content)){ + throw new RuntimeException("错误"); + } + AES aes = SecureUtil.aes(key.getBytes()); + byte[] encrypt = aes.encrypt(content); + return aes.encryptHex(content); + } + + public static String decrypt(String key, String content){ + if (StringUtils.isBlank(key) || StringUtils.isBlank(content)){ + throw new RuntimeException("错误"); + } + AES aes = SecureUtil.aes(key.getBytes()); + return aes.decryptStr(content, CharsetUtil.CHARSET_UTF_8); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PhoneUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PhoneUtils.java new file mode 100644 index 0000000..f2fd5bd --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PhoneUtils.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.utils; + +/** + * 手机号工具类 + */ +public class PhoneUtils { + + public static String hidePhone(String phone){ + if (StringUtils.isEmpty(phone) || phone.length() < 11){ + throw new RuntimeException("手机号格式错误"); + } + return phone.substring(0, 3) + "****" + phone.substring(7, 11); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java index 7f369d9..327adba 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java @@ -15,6 +15,8 @@ import com.cyl.ums.pojo.vo.MemberVO; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.model.LoginMember; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.AesCryptoUtils; +import com.ruoyi.common.utils.PhoneUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.LocalDataUtil; @@ -22,6 +24,7 @@ import com.ruoyi.framework.web.service.TokenService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.Base64Utils; @@ -41,6 +44,9 @@ public class H5MemberService { @Autowired private TokenService tokenService; + @Value("${aes.key}") + private String aesKey; + /** * 注册 * @param request 注册请求体 @@ -53,6 +59,8 @@ public class H5MemberService { //创建会员 Member member = new Member(); member.setPhone(request.getMobile()); + member.setPhoneEncrypted(AesCryptoUtils.encrypt(aesKey, request.getMobile())); + member.setPhoneHidden(PhoneUtils.hidePhone(request.getMobile())); member.setPassword(SecurityUtils.encryptPassword(request.getPassword())); member.setNickname("用户" + request.getMobile().substring(7,11)); member.setStatus(Constants.MEMBER_ACCOUNT_STATUS.NORMAL); @@ -70,7 +78,7 @@ public class H5MemberService { byte[] decodedBytes = Base64.getDecoder().decode(phone); phone = new String(decodedBytes); QueryWrapper qw = new QueryWrapper<>(); - qw.eq("phone", phone); + qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, phone)); Member member = memberMapper.selectOne(qw); if (member != null){ throw new RuntimeException("该手机号已被占用"); @@ -93,7 +101,7 @@ public class H5MemberService { H5AccountLoginRequest request = JSON.parseObject(new String(Base64Utils.decodeFromString(data)), H5AccountLoginRequest.class); log.info("account login request:{}", JSONUtil.toJsonStr(request)); QueryWrapper qw = new QueryWrapper<>(); - qw.eq("phone", request.getMobile()); + qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, request.getMobile())); Member member = memberMapper.selectOne(qw); if (member == null){ throw new RuntimeException(Constants.LOGIN_INFO.WRONG); @@ -115,7 +123,7 @@ public class H5MemberService { this.validateVerifyCode(request.getUuid(), request.getMobile(), request.getCode()); //查会员 QueryWrapper qw = new QueryWrapper<>(); - qw.eq("phone", request.getMobile()); + qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, request.getMobile())); Member member = memberMapper.selectOne(qw); if (member == null){ throw new RuntimeException(Constants.LOGIN_INFO.TO_REGISTER); diff --git a/ruoyi-mall/src/main/java/com/cyl/ums/domain/Member.java b/ruoyi-mall/src/main/java/com/cyl/ums/domain/Member.java index 2d75d50..a35cadd 100644 --- a/ruoyi-mall/src/main/java/com/cyl/ums/domain/Member.java +++ b/ruoyi-mall/src/main/java/com/cyl/ums/domain/Member.java @@ -35,6 +35,12 @@ public class Member extends BaseAudit { @Excel(name = "手机号码") private String phone; + @ApiModelProperty("加密手机号") + private String phoneEncrypted; + + @ApiModelProperty("隐藏前三位后四位的手机号") + private String phoneHidden; + @ApiModelProperty("用户备注") @Excel(name = "用户备注") private String mark;