일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구글애널리틱스
- GA4
- GET
- Polylang
- set
- @Query
- ChatGPT
- 플러그인
- firebase
- JPA
- @Controller
- post
- @Repository
- HttpSession
- router
- Login
- 구글알고리즘
- 인텔리제이
- 리액트오류
- 데이터베이스
- SEO
- 구글
- addallattributes()
- @Entity
- Thymeleaf
- linkedhastset
- db
- mergeattributes()
- useEffect
- 워드프레스
- Today
- Total
개발천재
[Spring Boot] HttpSession으로 로그인 구현하기 본문
HttpSession은 HTTP 요청 사이에서 데이터를 저장하고 공유하는데 사용되는 객체이다. 웹 애플리케이션에서 사용자 세션을 관리하는 데 중요한 역할을 한다. 웹 애플리케이션은 상태가 없는 stateless 프로토콜인 HTTP를 사용하기 때문에, 사용자가 여러 페이지를 방문할 때마다 서버가 사용자 정보를 기억할 수 있도록 HttpSession을 사용한다.
@GetMapping("/")
public String loginPage(Model model) {
model.addAttribute("member", new MemberDto());
return "login"; // login.html을 반환
}
@PostMapping("/home")
public String login(
@ModelAttribute("member") MemberDto member,
HttpSession session
) {
MemberDto findMember = memberService.findByIdAndPassword
(
member.getId(),
member.getPassword()
);
if (findMember != null) {
session.setAttribute("loginUser", findMember);
// id가 root이면 admin.html로 이동
if ("root".equals(findMember.getId())) {
return "redirect:/admin";
} else {
return "redirect:/member"; // 일반 유저는 index.html
}
}
return "redirect:/login?error=true"; // 로그인 실패 시 다시 로그인 페이지로
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.invalidate(); // 세션 삭제
return "redirect:/";
}
HttpSession 주요 기능
세션 생성 및 관리
HttpSession 객체는 웹 애플리케이션에서 사용자가 접속할 때 자동으로 생성된다.
서버는 클라이언트(브라우저)에게 세션을 구분할 수 있는 세션 ID를 부여하고, 이 세션 ID를 쿠키에 저장하여 사용자에게 전달한다.
HttpSession은 서버 측에서 관리되며, 클라이언트가 요청할 때마다 세션 ID를 통해 해당 세션을 식별한다.
데이터 저장
HttpSession은 세션에 데이터를 저장하고 나중에 다시 꺼낼 수 있도록 해준다. 예를 들어, 로그인 정보를 저장하고 세션이 유지되는 동안 사용자가 다른 페이지를 방문할 때 로그인 상태를 유지하게 할 수 있다.
데이터는 setAttribute, getAttribute 메서드를 사용하여 저장하고, 꺼낼 수 있다.
// 세션에 데이터 저장
session.setAttribute("username", "john_doe");
// 세션에서 데이터 가져오기
String username = (String) session.getAttribute("username");
세션 만료
세션은 일정 시간이 지나면 자동으로 만료될 수 있다. 만약 세션을 수동으로 종료하려면 session.invalidate() 메서드를 사용한다.
HttpSession은 기본적으로 사용자가 일정 시간 동안 활동하지 않으면 세션 타임아웃이 발생하여 자동으로 만료된다. 이 시간은 web.xml이나 Spring 설정에서 설정할 수 있다.
// 세션 만료
session.invalidate();
세션 유효성 검사
애플리케이션에서 특정 작업을 처리할 때 세션이 유효한지 확인할 수 있다. 예를 들어, 사용자가 로그인 후에만 특정 페이지를 접근할 수 있도록 할 때 사용한다.
if (session.getAttribute("username") == null) {
return "redirect:/login";
}
HttpSession 주요 메서드
- setAttribute(String name, Object value): 세션에 값을 저장한다.
- getAttribute(String name): 세션에서 값을 가져온다.
- removeAttribute(String name): 세션에서 값을 삭제한다.
- invalidate(): 세션을 종료하고 모든 데이터를 삭제한다.
- getId(): 세션의 고유 ID를 가져온다.
- getCreationTime(): 세션이 생성된 시간을 반환한다.
- getLastAccessedTime(): 마지막으로 세션에 접근한 시간을 반환한다.
세션 사용 시 주의할 점
세션 관리에 주의!
세션을 너무 많이 사용하면 서버 메모리에 부담이 될 수 있다. 따라서 세션 저장 데이터를 최소화하고, 세션 타임아웃을 적절히 설정하는 것이 좋다.
보안에 주의!
세션은 세션 하이재킹(Session Hijacking) 공격에 취약할 수 있다. 이를 방지하기 위해 세션 ID를 암호화하거나, HTTPS를 사용하여 세션 정보를 보호하는 것이 좋다.
서버 간 세션 공유에 주의!
여러 대의 서버를 운영할 때, 세션 정보를 공유하기 위해 세션 클러스터링 또는 세션 스티키 방법을 사용할 수 있다.
'개발 준비 > Spring Boot' 카테고리의 다른 글
[Spring Boot] RedirectAttributes 이해하기 (1) | 2025.02.21 |
---|---|
[Spring Boot] Thymeleaf, 반복문에서 index 보여주기, stat (2) | 2025.02.21 |
[Spring Boot] 생성일, 수정일 자동관리하기 @EnableJpaAuditing (4) | 2025.02.19 |
[Spring Boot] WebMvcConfigurer 이해하기 (1) | 2025.02.19 |
[Spring Boot] Validation, 검증하기 (2) | 2025.02.18 |