아래의 사이트에서 Spring 프로젝트를 설정할 수 있다.
Name : HttpSession
자바: 17
Dependencies : Lombok, Spring web

먼저 원하는 폴더에 다운받은 zip 파일의 압축을 풀어놓는다.
Spring Tool Suite 4 에 들어온 후
마우스 우클릭 후 "Import" 버튼을 클릭한다.

"Gradle"을 입력 후
"Existing Gradle Project" 를 클릭한다.

압축파일 풀어놓은 파일을 찾아 "폴더 선택"을 클릭한다.

패키지 및 설정을 아래의 그림과 같이 설정한다.

build.gradle 파일안에 JSP 의존성을 추가한다.
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'

cookie 폴더 "우 클릭" 한다.
Gradle 파일 클릭 한다.
"Refresg Gradle Project"를 클릭한다.

application.properties 의 이름을 아래와 같이 변경한다.
application.yml로 변경한다.

application.yml으로 변경 후 코드를 아래와 같이 작성하면 된다.

server:
port: 8080
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
아래의 코드를 실행하게 되면 세션의 동작을 확인할 수 있다.
LoginForm
더보기
package com.example.HttpSession.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class LoginForm {
private String username;
private String password;
}
SessionAuthController
더보기
package com.example.HttpSession.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.HttpSession.dto.LoginForm;
import com.example.HttpSession.service.AuthService;
import jakarta.servlet.http.HttpSession;
import lombok.Getter;
import lombok.Setter;
@Controller
@RequestMapping("/session")
public class SessionAuthController {
private final AuthService authService;
public SessionAuthController(AuthService authService) {
this.authService = authService;
}
// http://localhost:8080/session/login
@GetMapping("/login")
public String loginPage() {
return "login"; // /WEB-INF/views/login.jsp
}
@PostMapping("/login")
public String doLogin(@ModelAttribute LoginForm form,
HttpSession session,
Model model) {
boolean ok = authService.authenticate(form.getUsername(), form.getPassword());
if (!ok) {
model.addAttribute("error", "아이디 또는 비밀번호가 올바르지 않습니다.");
return "login";
}
// 세션에 로그인 사용자 저장 (서버저장)
session.setAttribute("LOGIN_USER", form.getUsername());
// JSESSIONID 쿠키는 서버가 자동으로 내려줌
return "redirect:/session/me";
}
@GetMapping("/me")
public String me(HttpSession session, Model model) {
Object user = session.getAttribute("LOGIN_USER");
if (user == null) {
return "redirect:/session/login";
}
model.addAttribute("username", user.toString());
return "me"; // /WEB-INF/views/me.jsp
}
@PostMapping("/logout")
public String logout(HttpSession session) {
//세션 무효화 (로그아웃)
session.invalidate();
return "redirect:/session/login";
}
}
AuthService
더보기
package com.example.HttpSession.service;
import java.util.Map;
import org.springframework.stereotype.Service;
@Service
public class AuthService {
// 데모용: username -> password (실무는 DB + PasswordEncoder)
private final Map<String, String> users = Map.of(
"test", "test123",
"admin", "admin123"
);
public boolean authenticate(String username, String password) {
String pw = users.get(username);
return pw != null && pw.equals(password);
}
}
login.jsp
더보기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Login</title></head>
<body>
<h2>세션 기반 로그인</h2>
<% String error = (String) request.getAttribute("error"); %>
<% if (error != null) { %>
<p style="color:red;"><%= error %></p>
<% } %>
<form method="post" action="/session/login">
<div>아이디: <input name="username" /></div>
<div>비밀번호: <input type="password" name="password" /></div>
<button type="submit">로그인</button>
</form>
</body>
</html>
me.jsp
더보기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Me</title></head>
<body>
<h2>내 정보</h2>
<p>안녕하세요, ${username} 님</p>
<form method="post" action="/session/logout">
<button type="submit">로그아웃</button>
</form>
</body>
</html>
로그인 페이지
http://localhost:8080/session/login
로그인 ID : test, PW: test123 으로 하게 되면 쿠키를 확인할 수 있다.
