发表于: 2017-07-06 21:04:44

1 985


今天:主要学习了任务需要的知识,完成了任务5的大部分内容,还剩下用MD5加密和把时间加密进去。


1. 学习了cookie,cookie类的几个方法怎么用,怎么设置cookie的有效期和有效路径,怎么添加cookie到Response里,怎么取出cookie的key和值,cookie默认的有效期是什么等。


2. 学习了SpringMVC中如何配置拦截器,怎么配置拦截器所作用的地址范围,多个拦截器中方法的不同顺序。


3. 了解了Des加密是一个对称加密的方式,现在很少使用了,找了一个Des加密的jar包。


4. 完成了任务5的大部分内容,在数据库中加入了用户名和密码的变量,修改了Dao和Model,Service,加入对用户名密码的验证,加入了一个拦截器来拦截地址是/u的页面,写了一个加密用的帮助类,在controller里登陆时加密用户名,并返回cookie,在拦截器里解密,解密传来cookie中的信息,并调用Service返回一个boolean值看是否有此用户。


部分代码:

拦截器:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Cookie [] cookies = request.getCookies();
   for(Cookie cookie : cookies){
   if (cookie.getName().equals("username")){
           String username = desCipher.decrypt(cookie.getValue());
           return userService.checkUsername(username);
       }
}
return false;
}


加密的帮助类(网上找的,不是很懂)

public class DesCipher {

private final char[] password = {'1','2','3','4','5','6','7','8'};

   public String decrypt(String input) throws IOException, GeneralSecurityException {
byte [] dataEn = input.getBytes("UTF-8");
       byte [] dataDe = OpenSSL.decrypt("des3", password, dataEn);
       return new String(dataDe, "UTF-8");
   }

public String encrypt(String input) throws IOException, GeneralSecurityException{
byte[] dataDe = input.getBytes("UTF-8");
       byte[] dataEn = OpenSSL.encrypt("des3", password, dataDe);
       return new String(dataEn, "UTF-8");
   }

}

登陆控制器:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String homePageLoginHandler(HttpServletRequest request, HttpServletResponse response) throws IOException, GeneralSecurityException {
   User user = userService.getUserByLogin(request);
   if(user == null){
       request.setAttribute("message", "用户或密码不正确");
   }
   else{
       String usernameEn = desCipher.encrypt(user.getUsername());
       usernameEn = usernameEn.substring(0, usernameEn.length() - 2);
       Cookie cookie = new Cookie("username", usernameEn);
       cookie.setMaxAge(100);
       cookie.setPath("/");
       response.addCookie(cookie);
       request.setAttribute("message", "用户 " + user.getName() + " 登陆成功!");
   }
   return "homepage";
}

Service中新增方法:

@Override
public User getUserByCookies(HttpServletRequest request) {
Cookie [] cookies = request.getCookies();
   if(cookies != null && cookies.length > 0){
       for (Cookie cookie : cookies){
           if (cookie.getName().equals("username")){
                 return getUserByUsername(cookie.getValue());
           }
       }
   }
   return null;

}

@Override
public boolean checkUsername(String username) {
    if(getUserByUsername(username) != null){
        return true;
    }
    return false;
}


@Override
public User getUserByLogin(HttpServletRequest request) {
   String username = request.getParameter("username");
   String password = request.getParameter("password");
   if(checkPassword(username, password)){
      return getUserByUsername(username);
   }
   return null;
}

public boolean checkPassword(String username, String password){
    User user = getUserByUsername(username);
    if(user == null){
        return false;
    }
    else {
        if (password.equals(user.getPassword())){
            return true;

        }

       else {

           return false;
       }
    }
}

问题:

1. 同时加密用户名和登陆时间传入cookie,拦截器拦截的时候,登录时间是用来做什么?


明天: 

1. 把登陆时间的加密加进去

2. 把MD5加进去

3. 了解Des算法和MD5算法。

4. 完成任务4不过关的地方。


总结:无


返回列表 返回列表
评论

    分享到