관리 메뉴

Legday

[Spring]아이디 저장기능(Cookie값 이용) 본문

Spring&Springboot/Spring(개인공부용)

[Spring]아이디 저장기능(Cookie값 이용)

Legday 2022. 9. 16. 12:40
Cookie란? 브라우저와 서버가 http통신을 할 때 session 정보를 브라우저가 저장하는데 이때 session정보를 가지고 있는 공간이 브라우저의 Cookie이다. 개인정보가 있기 때문에 보안을 잘 해야 한다!

 

실행화면

로그인할때 아이디 기억버튼을 체크하면

다음에 로그인 할때 아이디가 저장이된다.

1. 소스코드

<JAVA>

  • 브라우저 부터 응답헤더에 있는 cookie값을 가져와야 하기 때문에  loginForm에서 Requeset객체를 받아온다.
  • cookie에는 session아이디 말고도 session 의 고유키값도 있다.
  • 아래와 같이 고유 키값인 JSESSIONID와 사용자가 Response헤더에 담아서 보낸 username이라는 키도 있다.

  • 그리고 사용자로부터 받는 데이터객체인 DTO에서 아이디와 비번 그리고 아이디저장 버튼을 체크했는지 확인하는 remember변수를 받는다.
  • 그리고 쿠키에는 세션정보나 키값등이 들어있기 때문에 리스트로 받고 .getKooies()객체를 이용하여 Request객체에서 cookie값을 저장한다.
  • for-each문을 돌려 키값이 username을 가져와서 model객체를 이용하여 view에 전송한다.
@RequiredArgsConstructor
@Controller
public class UsersController {
	private final UsersService usersService;
	private final HttpSession session;
	private final HttpServletResponse response;
    
    // 로그인 컨트롤러
	@GetMapping("/loginForm")
	public String loginForm(Model model, HttpServletRequest request) { // 쿠키(cookie)
		Cookie[] cookies = request.getCookies();
		for(Cookie cookie : cookies) {
			if(cookie.getName().equals("username")) {
				model.addAttribute("username",cookie.getValue());
			}
		}
		
		return "users/loginForm";
	}

	@PostMapping("/login")
	public @ResponseBody CMRespDto<?> login(@RequestBody LoginDto loginDto) {
	
		if(loginDto.getRemember()) {
			Cookie cookie = new Cookie("username",loginDto.getUsername());
			cookie.setMaxAge(60*60*24); //쿠키가 저장되있는 시간
			response.addCookie(cookie);
		
		}else {
			Cookie cookie = new Cookie("usernmae",null);
			cookie.setMaxAge(60*60*24);
			response.addCookie(cookie);
		}
		Users principal = usersService.로그인(loginDto);

		if (principal == null) { // 로그인이 안됐다면
			return new CMRespDto<>(-1,"로그인 실패",null);
		}
		session.setAttribute("principal", principal);
		return new CMRespDto<>(1,"로그인성공",null);
	}
}

<xml>

  • ID가 적힌 폼에 value속성에 el표기법을 이용해 model로 전달받은 데이터를 띄어준다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ include file="../layout/header.jsp"%>

<div class="container">
	<form>
		<div class="mb-3 mt-3">
			<input id="username" type="text" class="form-control" placeholder="Enter username" required="required" value="${username}">
		</div>
		<div class="mb-3">
			<input id="password" type="password" class="form-control" placeholder="Enter password" required="required">
		</div>
		<div class="form-check mb-3">
			<label class="form-check-label"> 
			<input id="remember" class="form-check-input" type="checkbox" name="remember"> Remember me
			</label>
		</div>
		<button id="btnLogin" type="button" class="btn btn-primary">로그인</button>
	</form>
</div>

<script src="/js/users.js">
	
</script>
<%@ include file="../layout/footer.jsp"%>