作者的個人分享網:分享時刻【www.itison.cn】
登陸的業務邏輯一定要理解清楚
登陸功能要做的不僅僅是驗證用戶名密碼是否匹配,登陸功能要做的東西遠遠不止這個。
前端表單驗證(包括驗證碼驗證、用戶名密碼非空驗證、是否記住密碼等)。
後臺做登陸驗證(用戶名和密碼是否匹配數據庫用戶表)、跳轉登陸界面,登陸成功要跳轉首頁,登陸失敗要返回登陸界面並且提示登陸失敗,記住密碼則要有相應的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";
}
}