发表于: 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();
//判断输入的密码和数据库密码是否一致.MD5的getSaltverifyMD5做一个还原方法,判断是不是相等。
//这里用的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有希望补充分享的点
评论