发表于: 2020-05-15 23:09:54
1 1336
今天完成的事情:
昨天找的des加密代码有问题
今天重新找了des加密代码
代码太长不贴了.. 测试都成功了
重写了注册
对输入的密码用MD5进行加密加盐
@RequestMapping(value = "/register",method = RequestMethod.POST)
public String register(account account){
logger.info("传入对象为:"+account);
String u = account.getUsername();
String p = account.getPassword();
logger.info("输入的账户为:"+ u+"密码为"+p);
//判断输入的用户名是否为空 或者 空字符
if(u!=null && u!=""){
//判断数据库中是否有此用户名
account accountA = accountService.findAccount(u);
//如果查询出的账户id为空(代表用户不存在),才能注册
if(accountA ==null){
try{
//对传入的密码用MD5进行加密加盐
String MD5Password = MD5Util.generate(p);
//设置密码为新密码
account.setPassword(MD5Password);
//插入数据
int id = accountService.addAccount(account);
System.out.print("注册成功,请登录");
//返回到登录页面
return "loginPage";
}catch (Exception e){
System.out.print("注册失败,请重新填写注册信息");
return "registerPage";
}
}else {
System.out.print("用户名已经存在,请更换用户名");
return "registerPage";
}
}else{
System.out.print("用户名不能为空");
return "registerPage";
}
}
注册看下结果
MD5 对密码进行了加密加盐
这样就算别人看到你的数据库内容,也看不到密码内容了。
按任务要求修改了login 登录代码
代码
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(account account, HttpServletResponse response) throws Exception{
logger.info("输入的表格数据为为:" +account);
String u = account.getUsername();
String p = account.getPassword();
logger.info("取出account账号为"+u+"---------"+"取出account密码为"+p);
//判断输入的用户名是否为空 或者 空字符
if (u != null && u != "") {
logger.info("用户名通过");
account accountB = accountService.findAccount(u);
logger.info("查询出的内容为:"+accountB);
//判断数据库中是否有此用户名
if (!ObjectUtils.isEmpty(accountB)) {
logger.info("用户不为空");
//验证输入的密码和 加密加盐后的MD5密码是否相同 相同就返回true
if(MD5Util.verify(p,accountB.getPassword())==true) {
logger.info("密码正确");
//对此用户id进行des加密
String id = des.encryptFromLong(accountB.getId());
logger.info("对用户id加密的结果为========" + id);
//对当前时间进行des加密
String loginTime = des.encryptFromLong(System.currentTimeMillis());
logger.info("对时间加密的结果为========" + loginTime);
//对用户id和登陆时间一起进行des加密
String token = des.encrypt(id + "|" + loginTime);
logger.info("对用户id和登陆时间加密的结果(token)为========" + token);
// 创建2个cookie赋值
// Cookie nameCookie = new Cookie("name",u);
Cookie tokenCookie = new Cookie("token", token);
// 设置cookie存在时间
// nameCookie.setMaxAge(30*60);
tokenCookie.setMaxAge(30 * 60);
// 向客户端返回cookie
// response.addCookie(nameCookie);
response.addCookie(tokenCookie);
System.out.print("登陆成功,正在进入主页面");
return "homePage";
}else {
System.out.print("密码错误,请重新输入");
return "loginPage";
}
} else {
System.out.print("用户不存在,请重新输入用户名");
return "loginPage";
}
} else {
System.out.print("用户名不能为空!");
return "loginPage";
}
}
对应的是这个要求
用des先对用户id 当前时间进行了加密
然后把token放cookie里 返回给了客户端
登录时,因为我们的密码已经经过MD5加密了
所有需要用md5工具类的 verify方法
判断输入的用户密码(明文密码) 和查询出的密码(加密加盐的密码) 是否相同
根据前面注册的用户名密码 登录试试把
登录成功!
增加了注销功能
cookie时间设为0就行
//注销按钮
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpServletResponse response, HttpServletRequest Request) {
//创建一个cookie对象,得到cookie
Cookie[] cookies = Request.getCookies();
//先取出cookie
for (Cookie cookie : cookies) {
//如果存在name为token的cookie,则取出并修改token的时效为0
if (cookie.getName().equals("token")) {
cookie.setMaxAge(0);
logger.info("被删除的token是" + cookie.getName());
response.addCookie(cookie);
return "homePage";
}
}
return "homePage";
}
}
明天计划的事情:
完善代码
任务深度思考
评论