目录
学习内容:
基本模块
修改密码后端实现
dao层
service层
controller层
测试代码
一系列情况测试
修改代码前端实现
导入模板
进入修改代码页面
遇到问题:
反思:
学习内容:
基本模块
修改密码后端实现
dao层
Dao层
通过用户ID修改用户密码
修改密码后端实现
dao层
Dao层
通过用户ID修改用户密码
Dao层
通过用户ID修改用户密码
在baseMapper自带的跟新数据方法
updateByPrimaryKeySelective
service层
Service层
1. 接收四个参数 (用户ID、原始密码、新密码、确认密码)
2. 通过用户ID查询用户记录,返回用户对象
3. 参数校验
待更新用户记录是否存在 (用户对象是否为空)
判断原始密码是否为空
判断原始密码是否正确(查询的用户对象中的用户密码是否原始密码一致)
判断新密码是否为空
判断新密码是否与原始密码一致 (不允许新密码与原始密码)
判断确认密码是否为空
判断确认密码是否与新密码一致
4. 设置用户的新密码
需要将新密码通过指定算法进行加密(md5加密)
5. 执行更新操作,判断受影响的行数
@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,"修改密码失败!");
}
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.响应数据给客户端
Service层
1. 接收四个参数 (用户ID、原始密码、新密码、确认密码)
2. 通过用户ID查询用户记录,返回用户对象
3. 参数校验
待更新用户记录是否存在 (用户对象是否为空)
判断原始密码是否为空
判断原始密码是否正确(查询的用户对象中的用户密码是否原始密码一致)
判断新密码是否为空
判断新密码是否与原始密码一致 (不允许新密码与原始密码)
判断确认密码是否为空
判断确认密码是否与新密码一致
4. 设置用户的新密码
需要将新密码通过指定算法进行加密(md5加密)
5. 执行更新操作,判断受影响的行数
Controller层 (控制层:接受请求、响应结果)
1.通过形参接受客户端传递的参数
2.调用业务逻辑层的登录方法,得到登录结果
3.响应数据给客户端
获取到cookie中的user ID后调用修改密码方法即可
@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的超链接来定义方法
@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($);
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真的害人不浅,以后多多注意这块的错误,我明天要把基础信息模块弄完,然后再整理一些依稀记的到的面试题,来警醒自己



