From 75c8ac48eeed2c13e3caf8c50bbb78e9752998ec Mon Sep 17 00:00:00 2001 From: yang Date: Mon, 5 Jan 2026 10:01:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++- .../com/bao/dating/common/aliyun/SmsUtil.java | 3 ++ .../java/com/bao/dating/config/WebConfig.java | 3 +- .../bao/dating/controller/UserController.java | 21 ++++++-- .../com/bao/dating/mapper/CommentsMapper.java | 6 +-- .../com/bao/dating/service/UserService.java | 4 ++ .../dating/service/impl/UserServiceImpl.java | 48 +++++++++++++++++++ .../java/com/bao/dating/util/CodeUtil.java | 12 +++++ 8 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/bao/dating/util/CodeUtil.java diff --git a/pom.xml b/pom.xml index 278ec98..6618ff6 100644 --- a/pom.xml +++ b/pom.xml @@ -147,7 +147,11 @@ org.springframework.boot spring-boot-starter-mail - + + + org.springframework.boot + spring-boot-starter-data-redis + diff --git a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java index b09f8bc..35e5afd 100644 --- a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java +++ b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java @@ -75,6 +75,8 @@ public class SmsUtil { .setTemplateCode(templateCode != null ? templateCode : this.templateCode) .setTemplateParam(templateParam); + log.error("TemplateParam 实际值 = {}", templateParam); + SendSmsResponse response = client.sendSms(sendSmsRequest); if ("OK".equals(response.getBody().getCode())) { @@ -145,6 +147,7 @@ public class SmsUtil { jsonBuilder.append("}"); return sendSms(phoneNumber, templateCode, jsonBuilder.toString()); } + } diff --git a/src/main/java/com/bao/dating/config/WebConfig.java b/src/main/java/com/bao/dating/config/WebConfig.java index 98a0683..dc377a7 100644 --- a/src/main/java/com/bao/dating/config/WebConfig.java +++ b/src/main/java/com/bao/dating/config/WebConfig.java @@ -29,7 +29,8 @@ public class WebConfig implements WebMvcConfigurer { .addPathPatterns("/**") // 忽略的接口 .excludePathPatterns( - "/user/login" + "/user/login", + "/user/sendCode" ); } } diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index b62cdfd..2db83e4 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -12,11 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -/** - * 用户接口 - * - * @author KilLze - */ +import java.util.Map; + @RestController @RequestMapping("/user") public class UserController { @@ -79,4 +76,18 @@ public class UserController { UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO); return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO); } + + @PostMapping("/sendCode") + public Result sendCode(@RequestBody Map body) { + String phone = body.get("phone"); + userService.sendSmsCode(phone); + return Result.success(ResultCode.SUCCESS, "验证码发送成功"); + } + + @PostMapping("/loginByCode") + public Result loginByCode(@RequestBody Map body){ + boolean ok = userService.verifyCode(body.get("phone"), body.get("code")); + return ok ? Result.success(ResultCode.SUCCESS, "登录成功") : Result.error(ResultCode.SYSTEM_ERROR, "登录失败"); + } + } diff --git a/src/main/java/com/bao/dating/mapper/CommentsMapper.java b/src/main/java/com/bao/dating/mapper/CommentsMapper.java index 1de2c6d..bea0d80 100644 --- a/src/main/java/com/bao/dating/mapper/CommentsMapper.java +++ b/src/main/java/com/bao/dating/mapper/CommentsMapper.java @@ -8,14 +8,14 @@ import java.util.List; public interface CommentsMapper { // 添加评论 - @Insert("INSERT INTO comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})") + @Insert("INSERT INTO dating.comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})") int addComment(Comments comments); // 删除评论 - @Delete("DELETE FROM comments WHERE user_id = #{user_id}") + @Delete("DELETE FROM dating.comments WHERE user_id = #{user_id}") int deleteComments(@Param("user_id") Long user_id); // 根据动态ID查询评论列表 - @Select("SELECT * FROM comments WHERE post_id = #{post_id} ORDER BY created_at DESC") + @Select("SELECT * FROM dating.comments WHERE post_id = #{post_id} ORDER BY created_at DESC") List getCommentsByPostId(@Param("post_id") Long post_id); } diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index 5705ceb..bfc5ee6 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -45,4 +45,8 @@ public interface UserService { * @return 更新后的用户信息 */ UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO); + + void sendSmsCode(String phone); + + boolean verifyCode(String phone, String code); } diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index d6b48dd..3ddff5b 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -3,6 +3,7 @@ package com.bao.dating.service.impl; import com.bao.dating.common.aliyun.AliOssUtil; import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenTextScan; +import com.bao.dating.common.aliyun.SmsUtil; import com.bao.dating.common.result.AliOssResult; import com.bao.dating.common.result.GreenAuditResult; import com.bao.dating.context.UserContext; @@ -13,11 +14,13 @@ import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; +import com.bao.dating.util.CodeUtil; import com.bao.dating.util.FileUtil; import com.bao.dating.util.JwtUtil; import com.bao.dating.util.MD5Util; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -27,6 +30,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; /** * 用户服务实现类 @@ -36,6 +40,10 @@ import java.util.UUID; @Service public class UserServiceImpl implements UserService { + + @Autowired + private SmsUtil smsUtil; + @Autowired private AliOssUtil ossUtil; @@ -48,6 +56,9 @@ public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; + @Autowired + private StringRedisTemplate stringRedisTemplate; + /** * 用户登录 * @@ -275,4 +286,41 @@ public class UserServiceImpl implements UserService { BeanUtils.copyProperties(updatedUser, userInfoVO); return userInfoVO; } + + // 发送短信验证码 + @Override + public void sendSmsCode(String phone) { + //防刷:60 秒内只能发一次 + String key = "sms:code:" + phone; + Boolean exists = stringRedisTemplate.hasKey(key); + if (Boolean.TRUE.equals(exists)){ + throw new RuntimeException("请勿频繁发送验证码"); + } + // 生成验证码 + String code = CodeUtil.generateCode(); + // 发送短信 + smsUtil.sendVerificationCode(phone, code); + //存 Redis(5分钟过期) + stringRedisTemplate.opsForValue() + .set(key,code, 5, TimeUnit.MINUTES); + } + + // 校验验证码 + @Override + public boolean verifyCode(String phone, String code) { + + String key = "sms:code:" + phone; + String realCode = stringRedisTemplate.opsForValue().get(key); + //过期,未发送 + if (realCode ==null){ + return false; + } + //不匹配 + if (!realCode.equals(code)){ + return false; + } + // 校验成功,删除验证码(一次性) + stringRedisTemplate.delete(key); + return true; + } } diff --git a/src/main/java/com/bao/dating/util/CodeUtil.java b/src/main/java/com/bao/dating/util/CodeUtil.java new file mode 100644 index 0000000..be43c7f --- /dev/null +++ b/src/main/java/com/bao/dating/util/CodeUtil.java @@ -0,0 +1,12 @@ +package com.bao.dating.util; + +import java.util.Random; + +public class CodeUtil { + // 生成6位数字验证码 + public static String generateCode() { + Random random = new Random(); + int code=100000+random.nextInt(900000); + return String.valueOf(code); + } +}