发表于: 2017-10-14 22:35:07

1 809


一、今日完成

1.完成并提交任务5;

2.把MD5加密作为工具类,在controller层组件里响应处理“regist”请求,调用加密算法;

public class MD5Util {

public static String stringToMD5(String string){
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//计算md5函数
       md.update(string.getBytes());
//digest()最后确定返回md5 hash值,返回值为8位zifuc,
       // 因为md5 hash值是16位的hex值,实际上就是8位的字符
       //BigInteger函数则将8位的字符串转换成16位的hex值,用字符串来表示:得到字符串形式的hash值
       return new BigInteger(1,md.digest()).toString(16);
}
}
  //注册页面
   @RequestMapping(value = "regist",method = RequestMethod.GET)
public String regist(){
return "regist";
}

@RequestMapping(value = "registto",method = RequestMethod.POST)
public String register(@ModelAttribute("user")User  user){
String md5= MD5Util.stringToMD5(user.getUsername()+user.getPasswd());
userService.insert(user.getUsername(),md5);
log.info("----->"+user.getUsername()+md5);
return "ok";
}
}

3,客户端提交注册请求(post方法),在数据库创建该用户并生成存储相应加密后的passwd;

user表里id字段为primary key,需要设置为自增长,否则点击“注册”后,向数据库插入数据操作失败,产生500错误。

4.把拦截器作为工具类,在controller层组件里响应处理客户端“登录”请求,调用相关方法把客户端提交的name与passwd和数据库中进行对比,满足条件后提示登录成功,并跳转到相应页面;

public class LoginInterceptor  implements HandlerInterceptor {

Logger log = Logger.getLogger(LoginInterceptor.class);

@Resource
   private UserService userService;

//preHandle此方法是进行处理器拦截用的,顾名思义,该方法将在controller处理之前调用
   @Override
   public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

Cookie[] cookie = httpServletRequest.getCookies();
if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
if (cookie[i].getName().equals("token")) {
String token = cookie[i].getValue();
byte[ ] tk = TypeUtil.hexStringToByte(token);

byte[ ] tk1 = DES.decrypt(tk,"12345678");
System.out.println("sfsdfsdfsdfsdf----------:"+tk1.toString());
String tk2 = new String(tk1);
log.info("======"+tk1);

String id = "";
String time = "";
for (int j = 0; j < tk2.length(); j++) {
char c = tk2.charAt(j);
if (c == '=') {
for (int k = j + 1; k < tk2.length(); k++)
time = time + tk2.charAt(k);
break;
}
id = id + c;
}
if (userService.select(Long.parseLong(id)) != null) {

return true;
}
}
}
}
httpServletRequest.getSession();
String contextpath = httpServletRequest.getScheme() + "://" + httpServletRequest.getServerName() + ":" + httpServletRequest.getServerPort() + httpServletRequest.getContextPath();
String uri = contextpath + "/login";
httpServletResponse.sendRedirect(uri);
return true;
}
@Override
   public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}

@Override
   public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

}
}
//登录页面
@RequestMapping(value = "login",method = RequestMethod.GET)
public String login(){
return "login";
}
//登录失败页面
@RequestMapping(value = "no",method = RequestMethod.GET)
public String no(){
return "no";
}
//登录处理
@RequestMapping(value = "login",method = RequestMethod.POST)
public void loginaction(@RequestParam("username") String username, @RequestParam("passwd") String passwd, HttpServletResponse httpServletResponse) {
String md5= MD5Util.stringToMD5(username+passwd);
if(userService.verification(username,md5)){
//待加密内容
       long id=userService.selectByName(username).getId();
long creatDate=new Date().getTime();
String str = id+"="+creatDate;
//加密操作
       byte[ ] result = DES.encrype(str.getBytes() ,"12345678");
//把加密的字节转换为16进制
       String resules= TypeUtil.bytesToHexString(result);
Cookie cookie = new Cookie("token",resules);
cookie.setMaxAge(60*60*24*7);//保留7天
       httpServletResponse.addCookie(cookie);
try {
httpServletResponse.sendRedirect("home");
} catch (IOException e) {
e.printStackTrace();
}
}else {
try {
httpServletResponse.sendRedirect("no");
} catch (IOException e) {
e.printStackTrace();
}
}
}


二、明日计划

1.了解JMeter和memcache的使用方法和处理机制;

2.学习redis相关基础知识;


三、遇到问题

目前对spring框架的一些功能不熟悉,盲目去学习高大上的代码实例,结果遇到问题自己没法解决束手无策,导致任务进度一致卡壳,无谓的浪费了时间和精力。目前,还是应该以完成任务为主,一步步实现基本的功能后再去拓展和丰富代码。教训比较深刻。


四、收获

以上。


禅道进度:http://task.ptteng.com/zentao/task-view-10377.html


返回列表 返回列表
评论

    分享到