카테고리 없음

JavaSpring boot로 Session 로그인 시연해보기

정훈5 2026. 1. 28. 11:52

 

아래의 사이트에서 Spring 프로젝트를 설정할 수 있다.

Name : HttpSession

자바: 17

Dependencies : Lombok, Spring web

 

https://start.spring.io/

 

 

먼저 원하는 폴더에 다운받은 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 으로 하게 되면 쿠키를 확인할 수 있다.