일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 다차원배열
- 포트포워딩
- 1946
- 리눅스계열
- 배열최소값최대값
- 포트포워딩 안될때
- 도커
- docker
- Decapsulation
- 센토스
- EC2
- filezilla
- 유니캐스트
- 도커권한설정
- 우분투
- dbeaver
- ubuntu
- 백준
- 브로드캐스트
- 객체배열
- 페이로드
- 리눅스환경
- 네트워크모델
- 배열복사
- wan
- 모래시계출력
- 디비버
- 배열빈도수
- 오름차순
- 백준1946
- Today
- Total
다잘하고싶어
[Spring] 로그인구현2_쿠키 활용 본문
쿠키
서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저로 전달함.
로그인폼에서 아이디랑 비밀번호를 입력 후 로그인 버튼을 클릭하면
클라이언트(웹브라우저)에서 서버로 전송된다.
서버에서는 회원저장소 안에 회원정보가 존재하는 지를 확인하고, 정보가 존재하면 로그인 성공시킨다(비밀번호도 맞아야함)
이때, 존재하면 쿠키를 만들어서 웹 브라우저에 전달해준다.
즉, 로그인 성공처리과정에서 쿠키를 만들어서 클라이언트에게 전달해줘야한다는 의미.
웹브라우저는 내부의 쿠키저장소라는 곳에서 쿠키를 들고 있는다. 예를 들어 멤버아이디를 넘겨줬다면,(memberId = 1)
이후 웹브라우저는 다른 페이지에 접근할 경우, 전송할 때 항상 쿠키를 포함해서 전송한다. (memberId = 1)
- 로그인 아이디 아니라 클래스 상의 아이디
쿠키의 종류: 영속쿠키, 세션쿠키
- 영속쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
- 세션쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지
브라우저 종료시에 로그아웃이 되길 원하므로 세션쿠키를 사용하도록 한다.
쿠키 만들기
loginMember.getLoginId()는 Long 인데, new Cookie( ) 안에는 String 이 들어가야하므로 에러남.
생성한 쿠키를 서버에서 http 응답으로 보낼 때 response에 넣어주어야한다.
따라서 아래와 같이 HttpServletResponse를 추가해준다.
//쿠키에 시간정보를 주지 않으면 세션쿠기(브라우저 종료시 모두 종료)
Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getLoginId()));
//생성한 쿠키를 서버에서 http 응답으로 보낼 때 response에 넣어주어야한다.
//따라서 httpServlet Response 가 필요.
response.addCookie(idCookie);
return "redirect:/";
실행한 후 로그인 하고 나면
쿠키가 생성된 것을 확인할 수 있다. Set-Cookie: memberId =1
이후 다른 페이지로 이동하더라도 RequestHeader를 보면 Cookie 가 존재하는 것을 확인할 수 있다.
Application 에 Cookies에서도 확인 가능함.
쿠키를 활용한 로그인 정보 표시
새로운 홈 화면_HomeController
@Slf4j
@Controller
@RequiredArgsConstructor
public class HomeController {
private final MemberRepository memberRepository;
//@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/")
public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) {
if (memberId == null) {
return "home";
}
//로그인
Member loginMember = memberRepository.findById(memberId);
if (loginMember == null) {
return "home";
}
model.addAttribute("member", loginMember);
return "loginHome"; //로그인 사용사 전용 홈
}
}
쿠키를 받는 여러가지 방식 , 여기서는 스프링이 제공하는 방식을 사용
required = false -> 로그인 안 한 사용자도 들어오게 하도록 위함
로그아웃
쿠키를 날리면 됨.
@PostMapping("/logout")
public String logout(HttpServletResponse response) {
expireCookie(response,"memberId");
return "redirect:/";
}
private static void expireCookie(HttpServletResponse response, String cookieName) {
Cookie cookie = new Cookie(cookieName, null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
cookie.setMaxAge(0); 쿠키의 시간을 0으로 설정 -> 쿠키 종료 됨.
쿠키만으로 로그인 로그아웃을 구현할 수 있다.
그러나 쿠키를 사용하지 않는 이유?
https://22chaechae.tistory.com/14
Reference:
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
강의 듣고 내용 정리중
'이론학습 > SRPING' 카테고리의 다른 글
[Spring] 로그인구현6_서블릿HTTP 세션, 스프링이 제공하는 SessionAttribute (0) | 2022.10.08 |
---|---|
[Spring] 로그인구현5_세션 직접 구현하고 적용하기 (0) | 2022.10.07 |
[Spring] 로그인구현4_세션 사용하는 이유 (0) | 2022.10.07 |
[Spring] 로그인구현3_쿠키 활용 시 발생하는 문제 (1) | 2022.10.07 |
더티체킹 Dirty Checking (0) | 2022.09.22 |