作者的个人分享网:分享时刻【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";
}
}