spring에서 쿠키에 id값 저장을 실습하던 중,
1. 아이디저장 checkbox 체크시: 아이디값 쿠키에 저장, 브라우저에 id입력칸에 저장
2. 아이디저장 checkbox 미체크시: 아이디값 쿠키 삭제
를 구현하는 과정이 있었다.
checkbox는 boolean 타입으로 설정할 시
체크가 되어 있으면 : true
체크가 되어 있지않으면 : false로 반환한다
단, 래퍼 클래스 타입인 Boolean으로 설정 할 경우,
null값까지 반환한다.
=> 나는 계속 래퍼클래스 타입인 Boolean타입으로 설정하여 체크박스 미체크 시
null값이 나왔던 것.... boolean으로 설정해주니 해결완료
package com.fastcampus.ch2;
import java.net.URLEncoder;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/login")
public class LoginController {
@GetMapping("/login")
public String loginForm() {
return "loginForm";
}
@PostMapping("/login")
public String login(String id, String pwd, boolean rememberId, HttpServletResponse response) throws Exception{
** //체크박스의 데이터타입을 boolean으로 설정 시,
//체크박스 체크되어 있으면 value="true"
//체크박스 미체크되어 있으면 value="false"**
System.out.println("id"+id);
System.out.println("pwd"+pwd);
System.out.println("rememberId"+rememberId);
//1. id와 pw확인
if(!loginCheck(id,pwd)) {
//2-1. 일치하지 않으면 loginForm으로 이동
String msg = URLEncoder.encode("id 또는 pw가 일치하지 않습니다.","utf-8");
return "redirect:/login/login?msg="+msg;
}
//2-2. id와 pw일치하면, (아이디 쿠키 저장)
if(rememberId) { //아이디 저장버튼이 눌러져있을때 (참일때) => 쿠키 생성
//1.쿠키를 생성
Cookie cookie = new Cookie("id",id); //id라는 이름으로 들어오는 id값 저장
//2.응답에 저장
response.addCookie(cookie); //쿠키 추가
}else {
//아이디 저장버튼이 눌러져있지 않을 때(거짓일 때) => 쿠키 삭제
//1.쿠키를 삭제
Cookie cookie = new Cookie("id", id);
cookie.setMaxAge(0);
//2.응답에 저장
response.addCookie(cookie);
}
//3.홈으로 이동
return "redirect:/";
}
private boolean loginCheck(String id, String pwd) {
return "asdf".equals(id) && "1234".equals(pwd);
}
}
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.net.URLDecoder" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css" />
<style>
* { box-sizing:border-box; }
a { text-decoration: none; }
form {
width:400px;
height:500px;
display : flex;
flex-direction: column;
align-items:center;
position : absolute;
top:50%;
left:50%;
transform: translate(-50%, -50%) ;
border: 1px solid rgb(89,117,196);
border-radius: 10px;
}
input[type='text'], input[type='password'] {
width: 300px;
height: 40px;
border : 1px solid rgb(89,117,196);
border-radius:5px;
padding: 0 10px;
margin-bottom: 10px;
}
button {
background-color: rgb(89,117,196);
color : white;
width:300px;
height:50px;
font-size: 17px;
border : none;
border-radius: 5px;
margin : 20px 0 30px 0;
}
#title {
font-size : 50px;
margin: 40px 0 30px 0;
}
#msg {
height: 30px;
text-align:center;
font-size:16px;
color:red;
margin-bottom: 20px;
}
</style>
</head>
<body>
<form action="<c:url value='/login/login'/>" method="post" onsubmit="return formCheck(this);">
<h3 id="title">Login</h3>
<div id="msg">
<c:if test="${not empty param.msg}">
<i class="fa fa-exclamation-circle"> ${URLDecoder.decode(param.msg)}</i>
</c:if>
</div>
<input type="text" name="id" value="${cookie.id.value }" placeholder="이메일 입력" autofocus>
<input type="password" name="pwd" placeholder="비밀번호">
<button>로그인</button>
<div>
<label><input type="checkbox" name="rememberId" value="on" ${empty cookie.id.value? "":"checked"}> 아이디 기억</label> |
// 기본 value값은 있어도 되고 없어도 된다
//cookie.id.value 쿠키의 아이디 value값이 비어 있으면 공백(삭제)
//cookie.id.value 쿠키의 아이디 value값이 비어 있지 않으면 아이디저장 체크박스 checked
<a href="">비밀번호 찾기</a> |
<a href="">회원가입</a>
</div>
<script>
function formCheck(frm) {
let msg ='';
if(frm.id.value.length==0) {
setMessage('id를 입력해주세요.', frm.id);
return false;
}
if(frm.pwd.value.length==0) {
setMessage('password를 입력해주세요.', frm.pwd);
return false;
}
return true;
}
function setMessage(msg, element){
document.getElementById("msg").innerHTML = ` ${'${msg}'}`;
if(element) {
element.select();
}
}
</script>
</form>
</body>
</html>