修改密码【项目 商城】

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 修改密码【项目 商城】

修改密码


需要用户提交原始密码和新密码,再根据当前登录的用户进行信息的修改操作

1.修改密码-持久层

1.1规划需要执行的SQL语句

根据用户的uid修改用户password值。

update t_user set password=?,modified_user=?,modified_time=? where uid=?

根据uid查询用户的数据。在修改密码之前,首先保证当前这用户的数据存在,检测是否被标记为已经删除、检查输入的原始密码是否正确。

select* from t_user where uid=?

1.2 设计接口和抽象方法

UserMapper接口,将以上方法的抽象定义出来。将来映射到sql语句上。

/**
     * 根据用户的uid来修改用户密码
     * @param uid 用户的id
     * @param password 用户输入的新密码
     * @param modifiedUser 表示修改的执行者
     * @param modifiedTime 表示修改数据的时间
     * @return 返回值为受影响的行数
     *
     */
    Integer updatePasswordByUid(Integer uid,
                                String password,
                                String modifiedUser,
                                Date modifiedTime);
    /**
     * 根据用户的eid查询用户的数据
     * @param uid 用户的id
     * @return 如果找到了则返回对象,反之返回null值
     */
    User findByUid(Integer uid);

1.3 SQL的映射

配置到映射文件UserMapper.xml中

  <update id="updatePasswordByUid">
        update t_user set 
            password=#{password},modified_user=#{modifiedUser},modified_time=#{modifiedTime} 
        where uid=#{uid}
    </update>
    <select id="findByUid" resultMap="UserEntityMap">
        SELECT * FROM t_user WHERE uid = #{uid}
    </select>

UserMapper–修改密码

测试

单元测试功能测试。

UserMapperTests

  @Test
    public void updatePasswordByUid(){
        Integer rows = userMapper.updatePasswordByUid(7, "321", "管理员", new Date());
        System.out.println(rows);
    }
    @Test
    public void findByUid(){
        User user = userMapper.findByUid(7);
        System.out.println(user);
    }



UserMapperTests–修改密码

修改了findByUid的驼峰


2.修改密码-业务层

2.1 规划异常

1.用户的源密码错误,is_delete==1、uid找不到,在用户没有发现的异常。

2.update在更新的时候,有可能产生未知的异常,UpdateException。

UpdateException

package com.cy.store.service.ex;
/** 用户在更新的时产生未知的异常*/
public class UpdateException extends ServiceException{
    public UpdateException() {
        super();
    }
    public UpdateException(String message) {
        super(message);
    }
    public UpdateException(String message, Throwable cause) {
        super(message, cause);
    }
    public UpdateException(Throwable cause) {
        super(cause);
    }
    protected UpdateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

UpdateException


2.2 设计接口和抽象方法

执行用户修改密码的核心方法

IUserService

  void changePassword(Integer uid,
                        String username,
                        String oldPassword,
                        String newPassword);

UserServiceImpl

    @Override
    public void changePassword(Integer uid, 
                               String username, 
                               String oldPassword, 
                               String newPassword) {
        User result = userMapper.findByUid(uid);
        if (result==null||result.getIsDelete()==1){
            throw new UserNotFoundException("用户数据不存在");
        }
        //原始密码和数据库中密码进行比较
        String oldMd5Password = getMd5Password(oldPassword, result.getSalt());
        if (!result.getPassword().equals(oldMd5Password)){
            throw new PasswordNotMatchException("密码错误");
        }
        //将新的密码设置到数据库中,将新的密码进行加密再去更新
        String newMd5Password = getMd5Password(newPassword, result.getSalt());
        Integer rows = userMapper.updatePasswordByUid(uid, newMd5Password, username, new Date());
        if (rows!=1){
            throw new UpdateException("更新数据时产生未知的异常");
        }
    }
    /**
     *  定义一个md5算法加密处理
     */
    private String getMd5Password(String password,String salt){
        //md5 加密算法方法的调用(进行三次加密)
        for(int i=0;i<3;i++){
             password= DigestUtils.md5DigestAsHex((salt + password + salt).getBytes()).toUpperCase();
        }
        //返回加密之后的密码
        return password;
    }

IUserService–changePassword

测试

在单元测试类中编写单元测试方法

  @Test
    public void changePassword(){
        userService.changePassword(8,"test02","123","321");
    }

UserServiceTests–changePassword


3.修改密码-控制层

3.1 处理异常

UpdateException需要配置在统一的异常处理方法中。

    else if (e instanceof UpdateException){
            result.setState(5003);
            result.setMessage("更新数据时产生未知的异常");
        }

3.2 设计请求

/users.change_password
post
//需要和表单中的name属性值保持一致
String oldPassword,String newPassword,HttpSession session
JSONResult<Void>

3.3 处理请求

@RequestMapping("change_password")
    public JsonResult<Void> changePassword(String oldPassword,
                                           String newPassword,
                                           HttpSession session){
        Integer uid=getuidFromSession(session);
        String username=getUsernameFromSession(session);
        userService.changePassword(uid,username,oldPassword,newPassword);
        return new JsonResult<>(OK);
    }

测试

http://localhost:8080/users/change_password?oldPassword=321&newPassword=123


4.修改密码-前端页面

password.html中添加ajax请求的处理,不在手动去编写ajax结构,直接复制,然后在微调修改参数即可。

  <script type="text/javascript">
      $("#btn-change-password").click(function() {
        $.ajax({
          url: "/users/change_password",
          type: "POST",
          data: $("#form-change-password").serialize(),
          dataType: "json",
          success: function(json) {
            if (json.state == 200) {
              alert("密码修改成功!");
            } else {
              alert("密码修改失败!" + json.message);
            }
          },
          error: function (xhr) {
            alert("修改密码时产生未知的异常" + xhr.status);
            location.href = "login.html";
          }
        });
      });
    </script>

README–修改密码


测试

相关文章
|
7月前
|
JavaScript 数据安全/隐私保护
|
2月前
|
存储 监控 前端开发
如何修改网站后台登录
如何修改网站后台登录
|
3月前
|
数据库
Discuz!X3.5管理员前台正常后台登录不进去
Discuz!X3.5管理员前台正常后台登录不进如何解决 而且没反应 没报错 无提示?
59 0
|
6月前
|
Web App开发 数据安全/隐私保护
discuz密码找回:忘记管理员密码,忘记UCENTER创始人密码
discuz密码找回:忘记管理员密码,忘记UCENTER创始人密码
649 1
|
6月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
33 0
|
SQL Java 数据库连接
用户注册【项目 商城】2
用户注册【项目 商城】2
62 0
|
SQL 缓存 前端开发
用户登录【项目 商城】
用户登录【项目 商城】
144 0
|
SQL JavaScript 前端开发
用户注册【项目 商城】1
用户注册【项目 商城】1
62 0
|
JSON 缓存 前端开发
用户注册【项目 商城】4
用户注册【项目 商城】4
68 0
|
前端开发 测试技术 数据库
用户注册【项目 商城】3
用户注册【项目 商城】3
61 0