讨论区交流平台项目 - 修改密码

功能分析

用户访问请求提供旧密码以及新密码,在后台我们通过判断旧密码是否提供正确,如果验证通过就修改密码,不然就给前端返回错误提示。
就是很经典的三重架构流程开发就完事了。

开发步骤

数据访问层

数据访问层需要提供查询用户以及修改密码两种方法,在前面的开发过程中已经开发完成,具体代码看社区首页开发那块即可。

业务层

验证原始密码的正确性,以及成功后修改密码。
UserService 类:

package com.spring.community2.service;
import com.spring.community2.dao.LoginTicketMapper;
import com.spring.community2.dao.UserMapper;
import com.spring.community2.entity.LoginTicket;
import com.spring.community2.entity.User;
import com.spring.community2.util.CommunityConstant;
import com.spring.community2.util.CommunityUtil;
import com.spring.community2.util.MailClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@Service
public class UserService implements CommunityConstant {
    @Autowired
    private UserMapper userMapper;
    
    // 修改密码
    public Map<String, Object> updatePassword(int userId, String oldPassword, String newPassword) {
        Map<String, Object> map = new HashMap<>();
        // 空值处理
        if (StringUtils.isBlank(oldPassword)) {
            map.put("oldPasswordMsg", "原密码不能为空!");
            return map;
        }
        if (StringUtils.isBlank(newPassword)) {
            map.put("newPasswordMsg", "新密码不能为空!");
            return map;
        }
        // 验证原始密码
        User user = userMapper.selectById(userId);
        oldPassword = CommunityUtil.md5(oldPassword + user.getSalt());
        if (!user.getPassword().equals(oldPassword)) {
            map.put("oldPasswordMsg", "原密码输入有误!");
            return map;
        }
        // 更新密码
        newPassword = CommunityUtil.md5(newPassword + user.getSalt());
        userMapper.updatePassword(userId, newPassword);
        return map;
    }
}

视图层

提供对应功能接口方法使得用户可以访问即可。
UserController 类:

package com.spring.community2.controller;
import com.spring.community2.annotation.LoginRequired;
import com.spring.community2.entity.User;
import com.spring.community2.service.UserService;
import com.spring.community2.util.CommunityUtil;
import com.spring.community2.util.HostHolder;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
/**
 * @ClassName UserController
 * @Author ruizhou
 * @Date 2020/5/23 20:34
 **/
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private HostHolder hostHolder;
    // 修改密码
    @RequestMapping(path = "/updatePassword", method = RequestMethod.POST)
    public String updatePassword(String oldPassword, String newPassword, Model model) {
        User user = hostHolder.getUser();
        Map<String, Object> map = userService.updatePassword(user.getId(), oldPassword, newPassword);
        if (map == null || map.isEmpty()) {
            return "redirect:/logout";
        } else {
            model.addAttribute("oldPasswordMsg", map.get("oldPasswordMsg"));
            model.addAttribute("newPasswordMsg", map.get("newPasswordMsg"));
            model.addAttribute("PasswordMsg", map.get("newPasswordMsg"));
            return "/site/setting";
        }
    }
}

实现效果

输入原始密码、新密码,验证成功后跳转登录页面。讨论区交流平台项目 - 修改密码_第1张图片

你可能感兴趣的:(讨论区交流平台项目 - 修改密码)