理解登陸的業務邏輯

登陸的業務邏輯一定要理解清楚

登陸功能要做的不僅僅是驗證用戶名密碼是否匹配,登陸功能要做的東西遠遠不止這個。

前端表單驗證(包括驗證碼驗證、用戶名密碼非空驗證、是否記住密碼等)。

後臺做登陸驗證(用戶名和密碼是否匹配數據庫用戶表)、跳轉登陸界面,登陸成功要跳轉首頁,登陸失敗要返回登陸界面並且提示登陸失敗,記住密碼則要有相應的Cookie編程,如果有需求要驗證該用戶是否已經登陸過了。

登陸狀態,可以在數據庫添加一個字段表示,也可以放在session中,登陸成功要修改狀態,退出登陸也要修改狀態,並且返回登陸界面。

註銷登陸代碼示例:

/**
 * 註銷登陸
 * @param request
 * @return String
 */
@RequestMapping("outLogin")
public String outLogin(HttpServletRequest request) {
    request.getSession().removeAttribute("username");
    return "login";
}

跳轉登陸界面(做了攔截器後前端a鏈接跳轉只能通過後臺跳轉),以及顯示記住密碼:

/**
 * 跳轉登陸頁面
 *TODO
 *LIU
 * @return String
 *下午8:31:40
 */
@RequestMapping("loginView")
public String loginView(Model model, HttpServletRequest request) {
    //拿到客戶端的cookie
    Cookie[] cookies = request.getCookies();
    //循環找到相應的cookie
    for (Cookie cookie : cookies) {
        if(cookie.getName() != null && cookie.getName().equals("usernameAndpassword")) {
            String val = cookie.getValue();
            // 根據存進去的方式解析出來
            String [] user = val.split(":");
            UserLoginBean userLogin = new UserLoginBean(user[0],user[1]);
            System.out.println("Cookie裏面的用戶:" + userLogin);
            model.addAttribute("userLogin",userLogin);
        };
    }
    System.out.println("跳轉login.jsp頁面...");
    return "login";
}

登陸驗證:

/**
 * 驗證用戶登陸
 *TODO
 *LIU
 * @return String
 *下午11:07:54
 */
@RequestMapping("verifyLogin")
public String verifyLogin(UserLoginBean userLogin, Model model, HttpServletRequest request, HttpServletResponse response) {
    System.out.println("驗證用戶名和密碼:" + userLogin.toString());
    if(null != request.getSession().getAttribute("username") && request.getSession().getAttribute("username").equals(userLogin.getUsername())) {
        model.addAttribute("error","該用戶已經登錄!!");
        return "login";
    }

    boolean result = false;
    if(userLogin != null && !userLogin.getUsername().equals("") && !userLogin.getPassword().equals("")) {
        //登陸驗證
        result = loginService.getUserLoginCount(userLogin); 
    }
    model.addAttribute("userLogin",userLogin);
    if(result) {
        //存在這個用戶  才記住密碼
        if(request.getParameter("chkRememberMe") != null) {
            //new一個cookie,用於存用戶名和密碼
            Cookie c = new Cookie("usernameAndpassword",userLogin.getUsername() +":"+ userLogin.getPassword());
            //最大的聲明週期   以秒爲單位
            c.setMaxAge(60*60*24*7);
            //推送到客戶端
            response.addCookie(c);
        }else {
            //new一個cookie
            Cookie c = new Cookie("usernameAndpassword",userLogin.getUsername() +":"+ userLogin.getPassword());
            //最大的聲明週期   以秒爲單位
            c.setMaxAge(0);
            //推送到客戶端
            response.addCookie(c);
        }
        request.getSession().setAttribute("username", userLogin.getUsername());
        return "index";
    }else {
        model.addAttribute("error","用戶名或密碼填寫不正確!!");
        return "login";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章