项目实战(P4) (Day 32)

目录

学习内容:

基本模块

        修改密码后端实现

dao层

service层

controller层

测试代码

         一系列情况测试  

        修改代码前端实现

导入模板

进入修改代码页面

遇到问题:

反思:


学习内容:

基本模块

        修改密码后端实现

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真的害人不浅,以后多多注意这块的错误,我明天要把基础信息模块弄完,然后再整理一些依稀记的到的面试题,来警醒自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值