Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- db
- Greedy
- Servlet
- 김영한
- java
- AOP
- springdatajpa
- 스프링 핵심 원리
- 자바
- 그리디
- http
- 스프링 핵심 기능
- JDBC
- Spring Boot
- Exception
- 스프링
- transaction
- 인프런
- kotlin
- JPQL
- Thymeleaf
- Android
- spring
- pointcut
- 백준
- SpringBoot
- jpa
- Proxy
- QueryDSL
Archives
- Today
- Total
개발자되기 프로젝트
[로그인] 로그인 처리 - Servlet HTTP 세션 본문
Servlet은 HTTP Session기능 제공.
1. HttpSession
- 서블릿이 제공하는 HttpSession 도 앞서 만든 SessionManager 와 같은 방식으로 동작
- 서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성
- 쿠키 이름이 JSESSIONID 이고, 값은 추정 불가능한 랜덤 값이다.
- Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05
- HttpSession은 attribute(member정보), 쿠키 이름, 기타 정보(생성 시각, 마지막 요청 시각 등) 를 포함하는 객체.
- HttpServletRequest에서 httpRequest.getSession()을 통해 받을 수 있음.
2. HttpSession 사용
2.1 SessionConst
- HttpSession 에 데이터를 보관하고 조회할 때, 같은 이름이 중복 되어 사용할 상수 정의
- cookie이름으로 사용됨.
public interface SessionConst {
String LOGIN_MEMBER = "loginMember";
}
2.2 LoginController - loginV3()
- sessiong을 가져오기 위해 request.getSession()
- 세션을 조회했을 때 이미 있으면 기존 세션을 반환하고, 없으면 신규 세션 생성 후 반환.
- session.setAttribute(cookieName, 회원정보)
- setAttribute로 cookie이름으로 사용한 String과 세션에 넣을 정보를 넘겨주면.
- sessionId를 생성하여 회원 정보와 sessionId를 함께 저장.
- 쿠키에 sessionId를 담아서 client에 보냄.
@PostMapping("/login")
public String loginV3(@Validated @ModelAttribute("loginForm") LoginForm form,
BindingResult bindingResult, HttpServletRequest request){
if(bindingResult.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
if(loginMember == null){
bindingResult.reject("loginFail", "id 또는 pw가 맞지 않습니다.");
return "login/loginForm";
}
//로그인 성공 처리
//세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성 후 반환.
HttpSession session = request.getSession();
//세션에 로그인 회원 정보를 보관
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
return "redirect:/";
}
- 세션의 생성과 조회
- 세션을 생성하려면 request.getSession(true) 사용
- public HttpSession getSession(boolean create);
- 세션의 create 옵션에 대해 알아보자.
- request.getSession(true)
- 세션이 있으면 기존 세션을 반환한다.
- 세션이 없으면 새로운 세션을 생성해서 반환한다.
- default가 true
- request.getSession(false)
- 세션이 있으면 기존 세션을 반환한다.
- 세션이 없으면 새로운 세션을 생성하지 않는다. null 을 반환한다.
- request.getSession() : 신규 세션을 생성하는 request.getSession(true) 와 동일
- request.getSession(true)
- 세션을 생성하려면 request.getSession(true) 사용
- 세션에 로그인 회원 정보 보관
- session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
- 하나의 세션에 여러 값을 저장할 수 있다.
2.3 LoginController - logoutV3()
- 세션을 가져올 때 create 옵션을 false로 지정한다.
- 세션이 있으면 해당 세션을 가져오지만, 세션이 없으면 새로 만들지 않고 null 반환.
- session.invalidate() : 세션을 종료
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request){
//세션 없으면 null 반환.
HttpSession session = request.getSession(false);
if(session != null){
session.invalidate();
}
return "redirect:/";
}
2.4 HomeController - homeLoginV3()
- request.getSession(false) : true로 설정하면 로그인 하지 않았는데도 session이 생성된다.
- 불필요한 session 생성을 방지하기 위해 create : false로 지정한다.
- session.getAttribute(SessionConst.LOGIN_MEMBER) : 로그인 시점에 세션에 보관된 회원 정보를 찾는다.
- LOGIN_MEMBER 의 이름으로 생성된 cookie에서 sessionId를 가져옴.
- 해당 sessionId로 세션에 저장된 회원 정보 반환.
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model){
HttpSession session = request.getSession(false);
if(session == null){
return "home";
}
Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
//세션에회원 정보가 없는 경우. -> 일반 home
if(loginMember == null){
return "home";
}
//세션에 회원 정보가 있는 경우.-> login home
model.addAttribute("member", loginMember);
return "loginHome";
}
3. 사용
- 로그인을 하면 Response Headers cookie가 생성되었다.
- JSESSIONID = ~~~~~~
- JSESSIONID를 임의로 조작하고 접속하면??
- 로그인 하지 않은 상태로 간주, 일반 홈화면 보여줌.
4. GitHub : 210926 HttpSession
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[로그인] Session 정보와 TimeOut 설정 (0) | 2021.09.26 |
---|---|
[로그인] 로그인 처리 - Servlet HttpSession 2 (0) | 2021.09.26 |
[로그인] 로그인 처리 - 세션 적용 (0) | 2021.09.26 |
[로그인] 로그인 처리 - 세션 만들기 (0) | 2021.09.26 |
[로그인] 로그인 처리 - 세션 동작 방식 (0) | 2021.09.26 |
Comments