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
- Servlet
- http
- 백준
- SpringBoot
- QueryDSL
- AOP
- transaction
- JDBC
- Spring Boot
- spring
- 그리디
- 스프링
- db
- 김영한
- Thymeleaf
- JPQL
- pointcut
- Greedy
- 스프링 핵심 기능
- Android
- Proxy
- jpa
- 자바
- java
- 인프런
- 알고리즘
- springdatajpa
- kotlin
- Exception
- 스프링 핵심 원리
Archives
- Today
- Total
개발자되기 프로젝트
[로그인] 로그인 처리 - Servlet HttpSession 2 본문
1. @SessionAttribute
- Spring은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute 을 지원
- 이미 로그인 된 사용자를 찾을 때는 다음과 같이 하면 됨.
- 참고로 이 기능은 세션을 생성하지 않는다. -> create : false(required = false)
@SessionAttribute(name = "loginMember", required = false) Member loginMember
- @SessionAttribute 기능
- request에서 session을 꺼내고 session에서 name으로 쿠키 조회
- 해당 쿠키가 없으면 null 반환?
- 쿠키에서 JSESSIONID 조회
- 해당 JESSIONID로 member조회
- 세션을 찾고, 세션에 들어있는 데이터를 찾는 번거로운 과정을 스프링이 한번에 편리하게 처리
확인할 수 있다. - false로 지정했기 때문에 session이 없어도 새로 생성하지 않음.
- request에서 session을 꺼내고 session에서 name으로 쿠키 조회
2. 변경 전
//@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. 변경 후
@GetMapping("/")
public String homeLoginV3Spring(
@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model){
//세션에회원 정보가 없는 경우. -> 일반 home
if(loginMember == null){
return "home";
}
//세션에 회원 정보가 있는 경우.-> login home
model.addAttribute("member", loginMember);
return "loginHome";
}
4. TrackingModes
- 로그인을 처음 시도하면 url에 JSESSIONID가 포함되어 있다.
- 이 기능은 웹 브라우저가 쿠키를 지원하지 않을 때
- 쿠키 대신 URL을 사용하여 세션을 유지하는 방법 -> 잘 안씀 현실성 없음.
- 이 방법을 사용하기 위해서는 URL에 항상 이 값을 포함해서 전달해야 함.
- 테플릿 엔진은 엔진을 통해서 링크를 걸며 jesessionid를 url에 자동으로 포함해줌.
- 서버 입장에서는 웹 브라우저가 쿠키를 지원하는지 안하는지 처음에는 판단하기 어려움
- 그래서 쿠키도 전달하고 URL에 jsessionid로 같이 전달함.
- 만약 URL 전달 방식을 크고 싶으면 application.properties에 옵션ㅇ르 추가하면됨.
server.servlet.session.tracking-modes=cookie
4. GitHub : 210926 @SessionAttribute
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[로그인] Servlet Filter (0) | 2021.09.26 |
---|---|
[로그인] Session 정보와 TimeOut 설정 (0) | 2021.09.26 |
[로그인] 로그인 처리 - Servlet HTTP 세션 (0) | 2021.09.26 |
[로그인] 로그인 처리 - 세션 적용 (0) | 2021.09.26 |
[로그인] 로그인 처리 - 세션 만들기 (0) | 2021.09.26 |
Comments