理解登陆的业务逻辑(年少时候的见解,没时间完善,暂时备注)

作者的个人分享网:分享时刻【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";
	}
}
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章