发表于: 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()
- 打log的地点:
1. 异常分支或错误
2. 重大操作时一定要打log
3.有风险的方法头部和尾部
2.在写代码时一定要先花时间设计好结构,是否需要拦截器,拦截器是否需要嵌套,DB如何设计,如何设计加密后的token校验。
明天的计划:
继续重写一下任务5,把Task6的任务2完成,今天效率太低,基本什么都没做,明天绝不能这样了。
复选框的cookie验证/用户登录密码验证/自动登录cookie验证这三个功能必须都放到拦截器下,否则没法实现,但都放到一起代码结构混乱。思考了很久,拦截器不应该判断页面控件的属性,不该写checkbox的验证。但把复选框的判断放到controller,功能就没法实现。很矛盾,最后只能把这个checkbox的功能删除。
评论