Legday
[Spring]아이디 저장기능(Cookie값 이용) 본문
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"%>'Spring&Springboot > Spring(개인공부용)' 카테고리의 다른 글
| [Spring] Custom Exception 만들기 (0) | 2022.09.21 |
|---|---|
| [Spring] 인터셉트란? (0) | 2022.09.20 |
| [Spring] MariaDB 세팅하기 (0) | 2022.09.13 |
| [Spring] MyBatis 초기설정 후 데이터 읽어보기 (0) | 2022.09.02 |
| [Spring]H2 데이터베이스란 ? (0) | 2022.08.31 |