发表于: 2019-11-19 23:12:43

1 1074


今天完成的事:
1、使用session实现拦截器的登录验证。
session就是会话,代表服务器与浏览器的一次会话过程,cookie中存放一个sessionID,请求时会发送这个ID,而session的创建和使用都是在服务器中,浏览器没有session。
session与cookie的区别就是,cookie存放于浏览器,保存数据有限,且不安全。而session存放于服务器,安全性更好,但是占用服务器性能。

另外session最大的缺点就是如果负载均衡,某个服务器没有相关的session,就会无法获取信息。


session的获取,request.getSession()表示如果session不存在,则创建一个新的session,与方法内添加true是等价的,如果添加false,就表示session不存在则返回null,不会创建session。
session保存信息,session.setAttribute()表示保存信息,使用get可以获取信息。
session的有效时间,默认是30分钟,单位为秒,也可以在web.xml中设置会话超时,单位是分钟。
开始是加上了session非空的一个判断,但是发现输出根本就没有设置的语句,也就是session一直都是存在的,百度发现只是使用removeAttribute方法移除了session的相关属性值,于是改为使用invalidate方法,销毁session,但是发现当前的sessionId删除了,又立刻生成了一个sessionId,也就是说session是一直存在的,所以说是代表服务器与浏览器的对话啊。。这里就不用了添加session的非空判断了,只要判断是否存在相关属性的值即可。
removeAttribute方法与invalidate方法,这里可以只设置removeAttribute方法。
controller中,登录成功后,创建session,并存放token和userId,设置过期时间为10分钟,默认是30分钟。
controller中的注销方法,移除session相关属性值。
拦截器则是取值判断是否为空,是则false,重定向到首页,否则true,请求继续。
2、查看MD5加随机盐。
百度有很多都是说加随机盐和固定盐步骤一样,只不过盐是随机生成,还需要存放在数据库,在破解时取出,再进行MD5加密对比,判断是否结果相同。
这样的话感觉破解好像更容易呢,固定盐好歹也是在代码中,这样的随机盐就在数据库,还是和密文一一对应,一旦泄露就都没了。
后来找到了一个不同的做法,不需要将随机盐存放在数据库,或者说也是存放在数据库,只不过和密文一起打乱字符顺序。
这里是自定义的MD5加盐(固定盐、随机盐)加密,自定义MD5加密,工具类MD5加密方式的测试结果。
使用随机盐加密后,破解难度应该是增加了。
随机生成盐后,将盐与明文结合,使用MD5加密,而后将随机盐和密文拆分,重组成秘密文,保存数据库,这里的 charAt() 方法用于返回指定索引处的字符,索引长度从0到字符串长度-1。
但是这样只是手动打乱,规律太明显,这种方式也就是不需要将随机盐赤裸裸放在数据库而已。。
校验是将秘密文拆分成随机盐和密文,而后将明文与随机盐用MD5加密,与密文对比。
3、准备小课堂PPT。
生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
明天计划的事:
1、继续完成小课堂PPT。
2、了解任务六的要求,了解压测相关基础。
3、学习JMeter,压测JSP。
遇到的问题:
收获:
1、使用session实现拦截器的登录验证。
了解了session的创建、信息保存、有效时间设置、移除、销毁等操作。
2、了解了MD5加随机盐。
随机生成盐后,将盐与明文结合,使用MD5加密,而后将随机盐和密文拆分,重组成秘密文,保存数据库。
校验是将秘密文拆分成随机盐和密文,而后将明文与随机盐用MD5加密,与密文对比。
3、了解了 charAt() 方法用于返回指定索引处的字符。

返回列表 返回列表
评论

    分享到