개발천재

[Spring Boot] HttpSession으로 로그인 구현하기 본문

개발 준비/Spring Boot

[Spring Boot] HttpSession으로 로그인 구현하기

세리블리 2025. 2. 20. 21:43
반응형

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를 사용하여 세션 정보를 보호하는 것이 좋다.

 

서버 간 세션 공유에 주의!

여러 대의 서버를 운영할 때, 세션 정보를 공유하기 위해 세션 클러스터링 또는 세션 스티키 방법을 사용할 수 있다.

반응형