发表于: 2017-07-08 15:31:05

1 1114


今天完成的:

Task5,Task6的任务1

收获:

checkbox的cookie验证代码

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
logger.debug("LoginHandlerInterceptor开始工作--------------------------");
//该方法接收checkbox等多值数据,返回参数数组,若没有勾选返回null,勾选则进行判断
String[] isUseCookies = request.getParameterValues("isUseCookies");
String userName = request.getParameter("userName");
String password = request.getParameter("password");
//将数据保存在cookies里,非空验证
if (isUseCookies != null && isUseCookies.length > 0) {
Long uid = loginService.queryUserId(userName);
   //取当前时间的长整形值包含毫秒
   long millis = System.currentTimeMillis();
   //把create时间毫秒加入数据库
   loginService.insertCreateTime(millis);
   StringBuffer stringBuffer = new StringBuffer(uid.toString());
   stringBuffer.append(millis);
   logger.debug(stringBuffer + "---------------------------");
   //des加密
   String encode = DesUtils.encrypt(stringBuffer.toString(), "12345678");
   //编为utf8,否则存在特殊符号无法存入cookie
   String encode1 = URLEncoder.encode(encode, "UTF-8");
   logger.debug("DES加密进行utf8编码后:" + encode + "---------------------------");
   Cookie tokenCookie = new Cookie("dseToken", encode1);
   logger.debug(tokenCookie.getName() + tokenCookie.getValue());
   tokenCookie.setMaxAge(486000);//设置cookie的存在时间
   //   tokenCookie.setDomain(".Task5/login");跨域访问
   //   tokenCookie.setPath("/");
   response.addCookie(tokenCookie);
} else {
//如果未勾选保存密码,清除该cookie同时保留其他用户的cookie,但login页面对cookie进行匹配验证,其他cookie不会被读出
   Cookie[] cookies = request.getCookies();
   if (cookies != null && cookies.length > 0) {
for (Cookie c : cookies) {
if (c.getName().equals("userName")) {
c.setMaxAge(0);
               response.addCookie(c);
               //上面两段合在一起销毁cookies,不能落下第二句
           }
}
}
}

用户登录验证

Boolean judge = loginService.loginJudge(userName, password);
if (judge) {
List<Developer> list = deve.queryDeveloper();
   ModelAndView modelAndView = new ModelAndView("body2.page", "develperList", list);
   modelAndView.addObject("username", request.getParameter("userName"));
   return modelAndView;
}
return new ModelAndView("logFail");

自动登录验证

Cookie[] cookies2 = request.getCookies();
if (cookies2 != null && cookies2.length > 0) {
logger.debug("未经登录的访问" + "--------------------------");
   for (Cookie cookie : cookies2) {
logger.debug(cookie.getName() + "---------------------------");
       if (cookie.getName().equals("dseToken")) {
String desEncode = cookie.getValue();
           String decode = URLDecoder.decode(desEncode, "UTF-8");
           String decrypt = DesUtils.decrypt(decode, "12345678");
           String uid = decrypt.substring(0, 2);
           String createTime = decrypt.substring(2);
           logger.debug(createTime + "--------------------------");
           Boolean judge2 = loginService.matchUidAndCreateTime(Long.parseLong(uid), Long.parseLong(createTime));
           logger.debug(judge2 + "--------------------------------");
           if (judge2) {

}
if((request.getParameter("userNamo")!=null)&&(request.getParameter("password")!=null)){
return true;
           }
}
}
}

Jmeter压力测试

一般tomcat默认支持的并发在150左右,超过这个数目就要使用反向代理/配置集群/配置缓存

遇到的问题:

1.打log的重要性和打断点调试的好处, 写了十多条System.out.println(),后来全部换成了logger.debug()

  1. 打log的地点:

   1. 异常分支或错误
   2. 重大操作时一定要打log
   3.有风险的方法头部和尾部

2.在写代码时一定要先花时间设计好结构,是否需要拦截器,拦截器是否需要嵌套,DB如何设计,如何设计加密后的token校验。

明天的计划:

继续重写一下任务5,把Task6的任务2完成,今天效率太低,基本什么都没做,明天绝不能这样了。

复选框的cookie验证/用户登录密码验证/自动登录cookie验证这三个功能必须都放到拦截器下,否则没法实现,但都放到一起代码结构混乱。思考了很久,拦截器不应该判断页面控件的属性,不该写checkbox的验证。但把复选框的判断放到controller,功能就没法实现。很矛盾,最后只能把这个checkbox的功能删除。


返回列表 返回列表
评论

    分享到