发表于: 2021-08-29 21:03:53

1 975


一,今天完成的事情

任务五:继续补充,程序能运行,部署

1.使用DES对用户ID和登录时间加密,生成Token,放入Cookie中,拦截器里通过Cookie中判断Token的有效性来判断用户是否登录。

2.修改Task4中的两个页面,一个设为用户不登录可以访问,一个设为用户必须登录才可以访问。要求用户必须登录才能访问的url统一增加前缀 /u/。

3.登录要使用MD5加盐

4.登录退出账号


1,有的md5算法可以不在数据库存salt,因为算法用的是salt打乱位置,最后还混在密文中间。


2,我的JWT,因为cookie设置了10分钟的有效期,准备有效10分钟。

不用数据库中的登录时间写进登录保持时间的逻辑


3,先给数据库加了一个用户,查看任务5项目的时候请看代码中设置的用户名和密码。设置自动递增。

带明文密码测试数据

    @Test
   public void addUser() {
User user = new User();
       user.setCreatedAt( 34838747L );
       user.setUpdatedAt( 34838747L );
       user.setUsername("nicole");
       user.setPassword(MD5Util.getMD5Str("abcd1234"));
       userService.insert(user);
   }
}

成功得到密码是密文的用户id2


4,把

/profession

变成

/u/profession


加上拦截器的页面只有登录才能访问


5,要根据自己找到的工具类,充分理解工具类,才能写对逻辑。user里面登录,用MD5。

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String Login(HttpServletRequest request, Model model, HttpServletResponse response)
throws Exception {

//获取用户传入的账号密码
   String username = request.getParameter("username");
   String out_password = request.getParameter("password");

   User user = userService.selectByUsername(username);

   //验证该用户是否存在,如果不存在用户名,无法验证
   if (user != null ) {
//数据库中存储的已经加密的密码
       String md5Str= user.getPassword();

       //判断输入的密码和数据库密码是否一致.MD5getSaltverifyMD5做一个还原方法,判断是不是相等。
       //这里用的MD5不用存储salt,是逆向运算回去得到原来随机的salt
       boolean flag=MD5Util.getSaltverifyMD5(out_password,md5Str);

       if (flag) {
//生成token
           String token = JWTUtil.getJWT(String.valueOf(user.getId()), user.getUsername(),
                   new Date(), "3456");
           //token装到cookie中发送到客户端
           CookieUtil.setCookie(response, "token", token, 60 * 10);
           return "redirect:loginSuccessful";
       } else {
model.addAttribute("msg", "wrong password");
           return "login";
       }
} else {
model.addAttribute("msg", "no username");
       return "login";
   }

}


6,有loginSuccessful.jsp,但是除非是登录成功不跳转,controller给入口在user中。

没登录访问/u/**,会自动跳转到 /login,用我的代码GET访问 http://localhost:8080/tiles_login_war_exploded/login 也是如此。拦截器被成功设置拦截。


没有用户成功提示

密码错误成功提示



按照我创建的用户登录,会先跳转到成功页面。这是我写在user controller中的逻辑。


然后访问/u/**。拦截器被成功设置,不拦截放行的用户。这里放行的是/u/** 下面登录成功,能验证token的用户。


7,现在我的token没有设置更新,登录逻辑设置是cookie 10分钟失效。在内存,关闭浏览器失效。我关闭服务器也失效。


8,部署代码到云上linux,更新linux数据库。

也是和本地测试一样正常运行。不登录测试所有页面包括/u/开头页面,错误用户名,错误密码,正确用户名密码登录后测试/u/开头页面。


二,今天问题

要求用DES对用户ID和登录时间加密。Jwt自带HMAC-SHA-256加密方法,使用简单,我项目最终用的是这个方法。

.signWith(SignatureAlgorithm.HS256,secrety)

可以不带secrety,直接.signWith(SignatureAlgorithm.HS256) 已经加密.

signatureAlgorithm在JWT中的系列有:

  • ES256

  • ES384

  • ES512

  • HS256

  • HS384

  • HS512

  • RS256

  • RS384

  • RS512

是因为为了一定要用DES而用DES吗?


三,今天的收获

关闭服务器就退出。给的header页面本身没有退出按钮。如果是后端,任务5用token登录,一般是删除token后退出。

gif图片的要求里也没展示退出。

更新代码到github。部署到服务器成功运行。提交任务。


四,明天的计划

任务5深度思考,如果任务5有希望补充分享的点



返回列表 返回列表
评论

    分享到