1. 程式人生 > 實用技巧 >SpringBoot利用Cookie實現記住密碼

SpringBoot利用Cookie實現記住密碼

前臺html程式碼:

<div class="container">
	<form th:method="POST" th:action="@{/login}" th:object="${user}">
		<div class="table-responsive">
			<table class="table table-condensed">
			   <tr th:if="${errMsg != ''}">
			        <td><span class="text-danger" id="errMsg" th:text="${errMsg}"></span></td>
			   </tr>
                  <tr>
                       <td>使用者名稱</td>
                       <td>
                           <input type="text" class="form-control" id="username" name="username">
                       </td>
                  </tr>
                  <tr>
                       <td>密碼</td>
                       <td>
                           <input type="password" class="form-control" id="password" name="password">
                       </td>
                  </tr>
                  <tr>
                       <td></td>
                       <td><input type="checkbox" id="remember" name="remember">remember password</td>
                  </tr>
                  <tr>
                       <td><input type="submit" id="submit" value="登陸"/></td>
                  </tr>
			</table>
		</div>
	</form>
</div>

後臺Controller程式碼:

@PostMapping(value="login")
public String loginCheck(@ModelAttribute("user") User user, Model model
		, HttpServletRequest request, HttpServletResponse response) {
	if(user == null) return "nms/login";
	if(!"1".equals(user.getUsername()) || !"2023".equals(user.getPassword())) {
		model.addAttribute("errMsg", "使用者名稱或密碼不正確。");
		return "nms/login";
	}
	if(user.isRemember()) {
		Cookie ckUsername = new Cookie("nms_username", user.getUsername());
		ckUsername.setMaxAge(60*60*24*30);
		response.addCookie(ckUsername);
		Cookie ckPassword = new Cookie("nms_password", user.getPassword());
		ckPassword.setMaxAge(60*60*24*30);
		response.addCookie(ckPassword);
		Cookie ckRemember = new Cookie("nms_remember", "1");
		ckRemember.setMaxAge(60*60*24*30);
		response.addCookie(ckRemember);
	}else {
		Cookie[] cookies = request.getCookies();
		if(cookies != null) {
			for(Cookie cookie : cookies) {
				if("nms_username".equals(cookie.getName()) || "nms_password".equals(cookie.getName())
						|| "nms_remember".equals(cookie.getName())) {
					cookie.setMaxAge(0);
					response.addCookie(cookie);
				}
			}
		}
	}
	return "redirect:/nms";
}

前臺JavaScript程式碼:

var cookies = document.cookie.split(';');
function getCookie(mkey){
	for(var i = 0; i < cookies.length; i++){
		var kv = cookies[i].split('=');
		if(kv[0].trim()==mkey){
			return kv[1].trim();
		}
	}
	return '';
}

window.onload = function(){
	var username = getCookie("nms_username");
	var password = getCookie("nms_password");
	var remember = getCookie("nms_remember");
	if(remember == '1'){
		$("#username").val(username);
		$("#password").val(password);
		$("#remember").prop("checked", "checked");
	}
}