栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

项目实战(P3) (Day 32)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

项目实战(P3) (Day 32)

目录

学习内容:

基本模块

        修改密码后端实现

dao层

service层

controller层

测试代码

         一系列情况测试  

        修改代码前端实现

导入模板

进入修改代码页面

遇到问题:

反思:


学习内容:

基本模块

        修改密码后端实现

dao层
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.响应数据给客户端

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号