发表于: 2017-11-16 23:19:13
1 723
今日完成的事情:
今天准备了一下小课堂。然后继续任务五,任务五做了两天,这两天一直在看,session,cookie,token,加盐,拦截器,自己脑子很混乱,也没有很好的理清思路,代码写的也很差劲。写到下午的时候,师兄的一句话,真的是把我从深渊中拉了回来,师兄告诉我:看着任务做,任务要求干什么,就干什么,不要总想着做一些骚操作。
然后任务是:
短短两句话。我就对照着一步一步做:
使用des对用户id和登陆时间加密,生成token,放入Cookie中:
Long date=new Date().getTime();//获取当前时间
//把name和当前时间加密作为cookie的value,中间用.分割
Cookie cookie = new Cookie("token",desUtil.encrypt(name)+"."+desUtil.encrypt(date.toString()));
cookie.setMaxAge(1 * 60);// 设置过期时间为1min
//cookie作用域
cookie.setPath("/");
//添加cookie
response.addCookie(cookie);
接下来是拦截器通过Cookie中判断Token的有效性来判断用户是否登陆:
if (null==cookies) {//无cookies直接拦截
return false;
} else {//提取cookies中name为token的值,
for(Cookie cookie : cookies){
if(cookie.getName().equals("token")){
//通过.分离cookie的值
String[] cook=cookie.getValue().split("\\.");
//取得存放在cookie中的name
String name=desUtil.decrypt(cook[0]);
//判断数据库中是否有name属性的用户
if(userService.getUser(name)!=null){
Long time=Long.parseLong(desUtil.decrypt(cook[1]));
if ((new Date().getTime()-time)<=1000*1*30)//30秒之内可以免登录,当前时间减去登陆时间
然后进行第二部,用户登录才能访问的url同意增加前缀/u/:
@RequestMapping(value = "/u/courses",method = RequestMethod.GET)
public String courses(Model model){
List<Course> listCour=courseService.listCour();
for(int i=0;i<listCour.size();i++){
listCour.get(i).study=courseService.count(listCour.get(i).courseId);
}
model.addAttribute("listCour",listCour);
return "courses";
}
@RequestMapping(value = "/u/test",method = RequestMethod.GET)
public String date(Model model){
long date=System.currentTimeMillis();
List<Student> listStu=studentService.listStu();
model.addAttribute("listStu", listStu);
model.addAttribute("date",date);
return "test";
这两个加上前缀/u/。然后在spring-mvc配置文件里面进行配置拦截:
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/u/*"/>
<bean class="com.mmy.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
任务要求就全部完成了。都怪自己太不认真了,任务说的那么详细,自己却走了不少弯路。
总结一下任务五:
1.用户发送请求到浏览器
2.浏览器把请求发送给应用程序
3.如果请求为不需要登陆就可以访问的页面,则直接返回给浏览器
4.如果需要登录才能访问的页面,拦截器取出cookie进行判断
1)cookie无效,直接返回登陆页面
2)cookie有效,取出token进行验证,验证通过返回请求页面
3)token验证不通过,返回登陆页面
上面是大概流程。
拦截器,监听器,过滤器的区别,通俗易懂一点就是:
拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。
监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
明日计划的事情:
明日要进行小课堂,今天把任务提交了,明日再看一下哪里需要完善的,完善一下任务五。
遇到的问题:
没有按任务要求做任务。自己要好好反思一下自己,以后一定认真做事,按照任务要求和流程走。
收获:
会使用cookie存储token,并取出token进行验证。
任务开始时间:2017/11/14
预计完成时间:2017/11/18
延期:无
禅道:http://task.ptteng.com/zentao/my-task.html
评论