发表于: 2017-11-16 23:19:13

1 724


今日完成的事情:

今天准备了一下小课堂。然后继续任务五,任务五做了两天,这两天一直在看,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验证不通过,返回登陆页面

上面是大概流程。

拦截器,监听器,过滤器的区别,通俗易懂一点就是:

过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。
拦截器(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



返回列表 返回列表
评论

    分享到