MD5在UserService里面生成的摘要不一样

MD5在UserService里面生成的摘要不一样

http://img1.sycdn.imooc.com//climg/6076b3920919c4de19201030.jpg

http://img1.sycdn.imooc.com//climg/6076b3b9094fe00612910870.jpg

相关代码:UserService

package com.imooc.oa.service;

import com.imooc.oa.dao.RbacDao;
import com.imooc.oa.dao.UserDao;
import com.imooc.oa.entity.Node;
import com.imooc.oa.entity.User;
import com.imooc.oa.exception.BussinessException;
import com.imooc.oa.utils.MD5Utils;
import com.imooc.oa.utils.MyBatisUtils;

import java.util.List;

public class UserService {
private UserDao userDao = new UserDao();
private RbacDao rbacDao = new RbacDao();
/**
* 根据前台输入进行登录校验
* @param username 前台输入的用户名
* @param password 前台输入的密码
* @return User实体类
* @threws 自定义异常类BussinessException L001-用户名不存在 L002-密码错误
*/
public User checkLogin(String username, String password) {
User user = userDao.selectByUsername(username);
if (user == null) {
//抛出用户不存在异常
throw new BussinessException("L001", "用户名不存在");
}
//对前台输入的密码加盐混淆生成MD5摘要,与保存在数据库中的MD5进行对比
String md5 = MD5Utils.md5Digest(password, user.getSalt());
if (!md5.equals(user.getPassword())) {
throw new BussinessException("L002", "密码错误");
}
return user;
}

/**
* 没有什么业务逻辑 直接传递调用
* @param userId 要查询拥有那些功能的员工编号
* @return Node实体类的功能列表
*/
public List<Node> selectNodeByUserId(Long userId) {
List<Node> nodeList = rbacDao.selectNodeByUserId(userId);
return nodeList;
}

}

相关代码:Testor

package com.imooc.oa.utils;

import org.junit.Test;

import static org.junit.Assert.*;

public class MD5UtilsTest {

@Test
public void md5Digest() {
System.out.println(MD5Utils.md5Digest("test"));
System.out.println(MD5Utils.md5Digest("test"));
System.out.println(MD5Utils.md5Digest("test"));
System.out.println(MD5Utils.md5Digest("test"));

}
@Test
public void md5Digest2() {
System.out.println(MD5Utils.md5Digest("test", 188));
System.out.println(MD5Utils.md5Digest("test", 189));
System.out.println(MD5Utils.md5Digest("test", 190));
System.out.println(MD5Utils.md5Digest("test", 191));
System.out.println(MD5Utils.md5Digest("test", 192));
System.out.println(MD5Utils.md5Digest("test", 193));
System.out.println(MD5Utils.md5Digest("test", 194));
System.out.println(MD5Utils.md5Digest("test", 195));
System.out.println(MD5Utils.md5Digest("test", 196));
System.out.println(MD5Utils.md5Digest("test", 197));


}




}

相关代码:

LoginServlet


package com.imooc.oa.controller;

import com.alibaba.fastjson.JSON;
import com.imooc.oa.entity.User;
import com.imooc.oa.exception.BussinessException;
import com.imooc.oa.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet(name = "LoginServlet", urlPatterns = "/check_login")
public class LoginServlet extends HttpServlet {
//Logger 日志输出器 LoggerFactory.getLogger(LoginServlet.class)创建指定类的输出器
Logger logger = LoggerFactory.getLogger(LoginServlet.class);
private UserService userService = new UserService();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//接收用户输入的信息
String username = request.getParameter("username");
String password = request.getParameter("password");
Map<String, Object> result = new HashMap();
//调用业务逻辑
try {
User user = userService.checkLogin(username, password);
HttpSession session = request.getSession();
result.put("code", "0");
result.put("message", "success");
result.put("redirect_url", "/index");
//向session中储存登录用户信息,以便于IndexServlet调用User
session.setAttribute("login_user", user);
} catch (BussinessException ex) {
logger.error(ex.getMessage(), ex);//在日志中输出异常信息
result.put("code", ex.getCode());
result.put("message", ex.getMessage());
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
result.put("code", ex.getClass().getSimpleName());//Exception.getClass().getSimpleName()获取异常名
result.put("message", ex.getClass());
}
//返回对应结果 ---- 利用json只返回数据就可以了 不需要指定在那个页面返回 再利用ajax技术接收数据
//我们采用ajax的请求向服务器发送异步的通讯,告诉前台服务器校验是否通过的消息,不再在controller层进行页面跳转,只进行数据接收处理和返还
String json = JSON.toJSONString(result);
response.getWriter().println(json);
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-04-14 19:01:37

同学你好,建议同学查看传递密码是否与生成的密码一致,如下所示:以test生成的密码,则在传参时,也应该是test

http://img1.sycdn.imooc.com//climg/6076c15509509fb105370157.jpg

或同学重新调用md5Digest2()方法查看一下。

祝学习愉快!

  • 提问者 pleine #1

    http://img1.sycdn.imooc.com//climg/6076cc6109495eaa19201030.jpg重新调用md5Digest2方法生成的和我存放数据库的一致,和视频的也一直,但是在UserService生成

    String md5 = MD5Utils.md5Digest(password, user.getSalt());
    的md5 传入的是m8 test 就不一致了


    2021-04-14 19:07:16
  • 好帮手慕小尤 回复 提问者 pleine #2

    同学你好,测试同学代码是可以正确运行的,如下图所示:则建议同学输出user.getSalt()试一下,查看与数据库中内容是否相符。

    http://img1.sycdn.imooc.com//climg/6077a168090cd4a111500644.jpg

    祝学习愉快!

    2021-04-15 10:15:20
  • 提问者 pleine 回复 好帮手慕小尤 #3

    http://img1.sycdn.imooc.com//climg/6077ac0e099af24919201030.jpg输出user.getSalt()与数据库中的相符  


    2021-04-15 11:03:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师