用户--修改密码
修改用户密码
1.校验参数(原密码,新密码,重复输入的新密码)
2.判断原密码是否正确(调用userService根据用户名拿到原密码,再和old_pwd比对)
3.判断两次输入的密码是否一样
4.调用service完成密码更新
controller:userController
package com.example.controller; import com.example.pojo.Result; import com.example.pojo.User; import com.example.service.UserService; import com.example.utils.JwtUtil; import com.example.utils.Md5Util; import com.example.utils.ThreadLocalUtil; import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.URL; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/user") @Validated public class UserController { @Autowired private UserService userService; @Autowired private StringRedisTemplate stringRedisTemplate; @PatchMapping("/updatePwd") public Result updatePwd(@RequestBody Map<String, String> params,@RequestHeader("Authorization") String token) { //1.校验参数 String oldPwd = params.get("old_pwd"); String newPwd = params.get("new_pwd"); String rePwd = params.get("re_pwd"); if (!StringUtils.hasLength(oldPwd) || !StringUtils.hasLength(newPwd) || !StringUtils.hasLength(rePwd)) { return Result.error("缺少必要的参数"); } //原密码是否正确 //调用userService根据用户名拿到原密码,再和old_pwd比对 Map<String,Object> map = ThreadLocalUtil.get(); String username = (String) map.get("username"); User loginUser = userService.findByUserName(username); if (!loginUser.getPassword().equals(Md5Util.getMD5String(oldPwd))){ return Result.error("原密码填写不正确"); } //newPwd和rePwd是否一样 if (!rePwd.equals(newPwd)){ return Result.error("两次填写的新密码不一样"); } //2.调用service完成密码更新 userService.updatePwd(newPwd); //删除redis中对应的token ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); operations.getOperations().delete(token); return Result.success(); } }
service:userService
package com.example.service; import com.example.pojo.User; public interface UserService { //更新密码 void updatePwd(String newPwd); }
service:impl:UserServiceImpl
package com.example.service.impl; import com.example.mapper.UserMapper; import com.example.pojo.User; import com.example.service.UserService; import com.example.utils.Md5Util; import com.example.utils.ThreadLocalUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Map; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void updatePwd(String newPwd) { Map<String,Object> map = ThreadLocalUtil.get(); Integer id = (Integer) map.get("id"); userMapper.updatePwd(Md5Util.getMD5String(newPwd),id); } }
mapper:UserMapper
package com.example.mapper; import com.example.pojo.User; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; @Mapper public interface UserMapper { @Update("update user set password=#{md5String},update_time=now() where id=#{id}") void updatePwd(String md5String, Integer id); }
util:ThreadLocalUtil
package com.example.utils; import java.util.HashMap; import java.util.Map; /** * ThreadLocal 工具类 */ @SuppressWarnings("all") public class ThreadLocalUtil { //提供ThreadLocal对象, private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); //根据键获取值 public static <T> T get(){ return (T) THREAD_LOCAL.get(); } //存储键值对 public static void set(Object value){ THREAD_LOCAL.set(value); } //清除ThreadLocal 防止内存泄漏 public static void remove(){ THREAD_LOCAL.remove(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~