发表于: 2017-11-22 23:08:28

1 657


今天完成的任务


完成了做一个登陆需要的全部操作


/**
* 注册页面的载体
* @param user
* @return
*/
@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView userRegister(User user){
return new ModelAndView("userRegister");
}



/**
* controller层只负责判断输入的是否为空数据
*
* @param user
* @return
*/
@RequestMapping(value = "/getRegister", method = RequestMethod.POST)
public ModelAndView userGetRegister(User user){
//检测是否为空为null
   if (user.getName() != null && user.getPassword() != null && user.getEmail()!=null & user.getName().length() != 0 && user.getPassword().length() != 0 && user.getEmail().length()!=0 ) {
//检测输入的账号是否重复
       User userProofread = userService.getUserFromName(user);
       if (user.getName().equals(userProofread.getName())) {
return new ModelAndView("failLogon");
       }else{
userService.addUser(user);
           return new ModelAndView("successRegister");
       }

}else{
return new ModelAndView("failLogon");
   }
}

注册




@RequestMapping(value = "/logon", method = RequestMethod.GET)
public ModelAndView UserLogon(User user) {
ModelAndView mAndView = new ModelAndView("userLogon");
   return mAndView;
}


/**
*生成cookie页面
* @param user 用户的数据
* @param response cookie
* @return
*
* 判断UserLogon方法中的user的数据是否记录在数据库中
* 依此判断是否生成cookie
*
*/

@RequestMapping(value = "/getLogon", method = RequestMethod.POST)
public ModelAndView getUserLogOn(User user,HttpServletResponse response) {
if (user.getName() != null && user.getPassword() != null & user.getName().length() != 0 && user.getPassword().length() != 0) {//不能为空数据
       PersistentLogins p=persistentLoginsService.getUserFromName(user.getName());//获取卡密信息,这句话得修改?
       if(user.getName()!=null) {
String userMD5 = AppMD5Util.getMD5(user.getName(), user.getPassword());
           if (p.getToken().equals(userMD5)) {
CookieUtils.addCookie(user, userMD5, response);
               return new ModelAndView("successLogon");
           } else {
return new ModelAndView("failLogon");
           }
}else{return new ModelAndView("failLogon");}
}else{
return new ModelAndView("failLogon");
   }
}



登录




@RequestMapping(value = "/quit", method = RequestMethod.GET)
public ModelAndView userQuit(User user, HttpServletRequest request, HttpServletResponse response) {
CookieUtils.delCookie(response,CookieUtils.getRootCookie(request));
   return new ModelAndView("testLogon");
}

退出



检验


/**判定页面
* 检测如果cookie的值与用户的值相同的话
*/

@RequestMapping(value = "/test/u", method = RequestMethod.GET)
public ModelAndView test(User user, HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("testLogon");
}




<mvc:interceptors>
   <mvc:interceptor>
       <mvc:mapping path="/**/u"/>
       <bean class="com.task.interceptor.LoginInterceptor" />
   </mvc:interceptor>
</mvc:interceptors>


这里写了一个拦截/**/u界面的拦截器

拦截方法如下

 /**
    * 用于在登录前验证 _csrf 参数
    * */


   @Autowired
   @SuppressWarnings("SpringJavaAutowiringInspection")
private PersistentLoginsService persistentLoginsService;

   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
Cookie cookie= CookieUtils.getRootCookie(request);
           if(cookie!=null){
if(persistentLoginsService.verifyUserFromtoken(cookie.getValue())) {
System.out.println(persistentLoginsService.verifyUserFromtoken(cookie.getValue()));
           return true;
       }else {
response.setContentType("text/html;charset=utf-8");
           response.setStatus(403);
           OutputStream oStream = response.getOutputStream();
           oStream.write("无效的登陆!!!".getBytes("UTF-8"));
           return false;
       }
}else{
response.setContentType("text/html;charset=utf-8");
           response.setStatus(403);
           OutputStream oStream = response.getOutputStream();
           oStream.write("先登陆!!!".getBytes("UTF-8"));

           return false;
       }
}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
   }

}



很简单的判断


两个if一个是检验cookie中的密文与数据库记录的是否相同,另一个是检验有没有这个cookie


至于如何检验cookie中的密文与数据库记录的是否相同,我这里使用的方法简直烂爆了


我用的是再调取一遍存放密文的表,看看表中是否有这个密文

public boolean verifyUserFromtoken(String token) {
List<PersistentLogins> persistentLogins = persistentLoginsMapper.verifyUserFromtoken(token);
   System.out.println(persistentLogins.size());
   System.out.println(persistentLogins);
   if (persistentLogins.size() != 0) {
return true;
   } else {
return false;
   }


太慢,但是我又没啥好的方法




service层


 public int addPersistent_logins(User user){
PersistentLogins p=new PersistentLogins();
      p.setUsername(user.getName());
      String a=AppMD5Util.getMD5(user.getName(),user.getPassword());
      System.out.println(a);
      p.setToken(a);
      return persistentLoginsMapper.addPersistent_logins(p);
   }



public PersistentLogins getUserFromName(String username){
List<PersistentLogins> getPersistentLogins= persistentLoginsMapper.getUserFromName(username);

      if(getPersistentLogins.size()!=1){
return  new PersistentLogins();
      }else{
return getPersistentLogins.get(0);
      }
}

public PersistentLogins verifyUserFromName(String username){
List<PersistentLogins> getPersistentLogins= persistentLoginsMapper.verifyUserFromName(username);

       if(getPersistentLogins.size()!=1){
return  new PersistentLogins();
       }else{
return getPersistentLogins.get(0);
       }
}


public boolean verifyUserFromtoken(String token) {
List<PersistentLogins> persistentLogins = persistentLoginsMapper.verifyUserFromtoken(token);
     System.out.println(persistentLogins.size());
     System.out.println(persistentLogins);
     if (persistentLogins.size() != 0) {
return true;
     } else {
return false;
     }

}
}



public List<User> list(){
return  userMapper.list();
   }

/**
    * 注册所使用的
    */

   public int addUser(User user){
user.setBirthday(unit.getCreationTime());//获取记录时间
       persistentLoginsServiceImpl.addPersistent_logins(user);//将用户信息加密后输入到另一表中
       return userMapper.addUser(user);

   }

/**
    * 若表中此用户不唯一则返回null
    * @param user
    * @return
    */

   public User getUserFromName(User user){
List<User> getUser=userMapper.getUserFromName(user);
       if(getUser.size()!=1){
return  new User();
       }else{
return getUser.get(0);
       }
}


}



cookie的操作

public class CookieUtils {
/**
    *
    * @param user
    * @param userMD5
    * @param response
    */
   public static void addCookie(User user, String userMD5, HttpServletResponse response) {
Cookie cookie = new Cookie("user", userMD5);
       cookie.setMaxAge(COOKIE_MAX_AGE);//设置周期
       response.addCookie(cookie);
   }
/*


*/


   public static void delCookie(HttpServletResponse response, Cookie cookie) {
if (cookie != null) {
cookie.setPath("/");
           cookie.setMaxAge(0);
           cookie.setValue(null);

           response.addCookie(cookie);
       }
}

/**
    * 返回cookie
    *
    * @param
    * @param request
    * @return
    */

   public static Cookie getRootCookie(HttpServletRequest request) {

Cookie[] cookies = request.getCookies();//获取cookie
       for (Cookie c : cookies) {
if (c.getName().equals("user"))
return c;
       }
return null;

   }


}



cookie默认是存放一个月的



有一个小问题

任务四是用tiles做的




这一部分是其中的一个页面

请问这一部分该如何通过判定cookie的不同来显示不同的页面


返回列表 返回列表
评论

    分享到