目录
学习内容:
基本模块
修改密码后端实现
dao层
Dao层 通过用户ID修改用户密码
在BaseMapper自带的跟新数据方法
updateByPrimaryKeySelective
service层
Service层 1. 接收四个参数 (用户ID、原始密码、新密码、确认密码) 2. 通过用户ID查询用户记录,返回用户对象 3. 参数校验 待更新用户记录是否存在 (用户对象是否为空) 判断原始密码是否为空 判断原始密码是否正确(查询的用户对象中的用户密码是否原始密码一致) 判断新密码是否为空 判断新密码是否与原始密码一致 (不允许新密码与原始密码) 判断确认密码是否为空 判断确认密码是否与新密码一致 4. 设置用户的新密码 需要将新密码通过指定算法进行加密(md5加密) 5. 执行更新操作,判断受影响的行数
/**
* @author QQ星
* 修改密码
1.通过用户ID查询用户记录,返回用户对象
2. 参数校验
待更新用户记录是否存在 (用户对象是否为空)
判断原始密码是否为空
判断原始密码是否正确(查询的用户对象中的用户密码是否原始密码一致)
判断新密码是否为空
判断新密码是否与原始密码一致 (不允许新密码与原始密码)
判断确认密码是否为空
判断确认密码是否与新密码一致
3.设置用户的新密码
需要将新密码通过指定算法进行加密(md5加密)
4.执行更新操作,判断受影响的行数
*
* @param userId
* @param oldPwd
* @param newPwd
* @param repeatPwd
* @return void
* @Date 2022/2/27 15:17
*/
@Transactional(propagation = Propagation.REQUIRED)
public void updatePassWord(Integer userId,String oldPwd,String newPwd,String repeatPwd){
//通过用户ID查询用户记录,返回用户对象
User user = userMapper.selectByPrimaryKey(userId);
//判断用户记录是否存在
AssertUtil.isTrue(null==user,"参数记录不存在");
//参数校检
checkPasswordParams(user,oldPwd, newPwd,repeatPwd);
//设置用户新密码
user.setUserPwd(Md5Util.encode(newPwd));
//执行更新,判断受影响的参数
AssertUtil.isTrue(userMapper.updateByPrimaryKeySelective(user)<1,"修改密码失败!");
}
/**
* @author QQ星
* 修改密码参数校检
判断原始密码是否为空
判断原始密码是否正确(查询的用户对象中的用户密码是否原始密码一致)
判断新密码是否为空
判断新密码是否与原始密码一致 (不允许新密码与原始密码)
判断确认密码是否为空
判断确认密码是否与新密码一致
*
* @param user
* @param oldPwd
* @param newPwd
* @param repeatPwd
* @return void
* @Date 2022/2/27 15:28
*/
public void checkPasswordParams(User user, String oldPwd, String newPwd, String repeatPwd) {
//判断原始密码是否为空
AssertUtil.isTrue(null==oldPwd,"原始密码不能为空!");
//判断原始密码是否正确
AssertUtil.isTrue(!(user.getUserPwd().equals(Md5Util.encode(oldPwd))),"原始密码不正确!");
//判断新密码是否为空
AssertUtil.isTrue(null==newPwd,"新密码不能为空!");
//判断新密码是否与原密码一致
AssertUtil.isTrue(oldPwd.equals(newPwd),"原始密码和新密码不能一致!");
//判断确认密码是否为空
AssertUtil.isTrue(null==repeatPwd,"确认不能为空!");
//判断确认密码和新密码是否一致
AssertUtil.isTrue(!repeatPwd.equals(newPwd),"新密码和确认密码不一致!");
}
controller层
Controller层 (控制层:接受请求、响应结果) 1.通过形参接受客户端传递的参数 2.调用业务逻辑层的登录方法,得到登录结果 3.响应数据给客户端
获取到Cookie中的user ID后调用修改密码方法即可
/**
* @author QQ星
* 用户修改密码
*
* @param request
* @param oldPassword
* @param newPassword
* @param repeatPassword
* @return com.xxxx.crm.base.ResultInfo
* @Date 2022/2/27 16:28
*/
@PostMapping("updatePwd")
@ResponseBody
public ResultInfo updateUserPassword(HttpServletRequest request,
String oldPassword, String newPassword, String repeatPassword){
ResultInfo resultInfo =new ResultInfo();
try {
//获取Cookie中的userID
Integer userId= LoginUserUtil.releaseUserIdFromCookie(request);
//调用Service层中修改密码的方法
userService.updatePassWord(userId,oldPassword,newPassword,repeatPassword);
}catch (ParamsException p){
resultInfo.setCode(p.getCode());
resultInfo.setMsg(p.getMsg());
p.printStackTrace();
}catch (Exception e){
resultInfo.setCode(500);
resultInfo.setMsg("修改密码失败");
e.printStackTrace();
}
return resultInfo;
}
测试代码
接口是否可以使用
新思想:从网页中拿去cookie,你不能直接传入参数userId,运用postman来模拟网页cookie
模拟cookie
不再报id问题
一系列情况测试
原密码错误
新密码为空
新密码原始密码一致
确认密码为空
确认密码和新密码不一致
修改代码前端实现
导入模板
进入修改代码页面
根据main.ftl的超链接来定义方法
/**
* @author QQ星
* 进入修改密码的页面
*
* @param
* @return java.lang.String
* @Date 2022/2/27 17:55
*/
@RequestMapping("toPasswordPage")
public String toPasswordPage(){
return "user/password";
}
书写表单提交的password.js
layui.use(['form','jquery','jquery_cookie'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.jquery,
$ = layui.jquery_cookie($);
/**
* 表单的submit监听
* form.on('submit(按钮元素的lay-filter属性值)', function (data) {
});
*/
form.on('submit(saveBtn)', function (data) {
// 所有表单元素的值
console.log(data.field);
// 发送ajax请求
$.ajax({
type:"post",
url:ctx + "/user/updatePwd",
data:{
oldPassword:data.field.old_password,
newPassword:data.field.new_password,
repeatPassword:data.field.again_password
},
success:function (result) {
// 判断是否修改成功
if (result.code == 200) {
// 修改密码成功后,清空cookie数据,跳转到登录页面
layer.msg("用户密码修改成功,系统将在3秒钟后退出...", function () {
// 清空cookie
$.removeCookie("userIdStr",{domain:"localhost",path:"/crm"});
$.removeCookie("userName",{domain:"localhost",path:"/crm"});
$.removeCookie("trueName",{domain:"localhost",path:"/crm"});
// 跳转到登录页面(父窗口跳转)
window.parent.location.href = ctx + "/index";
});
} else {
layer.msg(result.msg, {icon:5});
}
}
});
});
});
新思想:需要把用户cookie记录删掉最后再返回登录界面
遇到问题:
修改密码失败,不能进库去修改表中数据
我TM吐了,不知道哪里出错,从下午开始把今天的从头敲了一边,最后看了报错信息是无法找到User的username,因为上传代码的原因,我就点了返回上一次的代码再从头敲一遍,但是又忘了,自己在login前面加了一个user
甚至还去研究了前一天用户登录模块的代码
最后发现还是genterator的原因有些还是没有大写,淦!!!!
学习时间:
2.27 14:36-17:58、19:48-23:48
反思:
大前天去了面试,有点难受现在的水平还是面试小公司还是有些差距,我都知道一些些但是还是不能完全回答上来,还有一点想吐槽的是小公司招实习生标准竟然和招java工程师的标准一模一样,有点难以理解的是为什么我有Java实习生的水准要来你这个公司当个实习生呢?
然后前天npy生日,和大学里以前的学长和同学一起在下沙玩了一天,昨天晚上才回来,今天信心满满的想把基础信息模块全部弄完,结果这个genterator真的害人不浅,以后多多注意这块的错误,我明天要把基础信息模块弄完,然后再整理一些依稀记的到的面试题,来警醒自己