Coding 공부/IntelliJ

[IntelliJ_SpringBoot] 스프링 부트에서 세션을 사용한 로그인 정보 저장 (10단계 + 예제 코드)

CBJH 2024. 5. 31.
728x90
반응형

1. 의존성 추가: build.gradle (Gradle) 또는 pom.xml (Maven) 파일에 Spring Session 의존성을 추가합니다.

Gradle
// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.session:spring-session-core'
 

2. 세션 설정 활성화: application.properties 또는 application.yml 파일에 세션 설정을 추가합니다.

 
# application.properties
server.servlet.session.timeout=3600  # 세션 유효 시간 (초)
 
3. 로그인 컨트롤러 생성: 로그인 요청을 처리하고 세션에 사용자 정보를 저장하는 컨트롤러를 만듭니다.
 
// LoginController.java
@RestController
public class LoginController {

    @PostMapping("/login")
    public String login(@RequestBody User user, HttpSession session) {
        // 사용자 인증 로직 (DB 조회 등)
        if (isValidUser(user)) {
            session.setAttribute("user", user);
            return "로그인 성공";
        } else {
            return "로그인 실패";
        }
    }
}
 

4. User 클래스 생성: 사용자 정보를 담을 User 클래스를 정의합니다.

 
// User.java
public class User {
    private String username;
    private String password;
    // ... (getter, setter)
}
 

5. 인증 로직 구현: isValidUser 메서드를 구현하여 사용자 인증 로직을 처리합니다. (예: 데이터베이스에서 사용자 정보 조회)

 
// LoginController.java (isValidUser 메서드 추가)
private boolean isValidUser(User user) {
    // 데이터베이스에서 사용자 정보 조회 및 비밀번호 비교 등
    // ...
}
 

6. 세션 정보 확인 컨트롤러 생성: 로그인 여부를 확인하고 세션에 저장된 사용자 정보를 가져오는 컨트롤러를 만듭니다.

 
// SessionCheckController.java
@RestController
public class SessionCheckController {

    @GetMapping("/check")
    public String check(HttpSession session) {
        User user = (User) session.getAttribute("user");
        if (user != null) {
            return "로그인 상태: " + user.getUsername();
        } else {
            return "로그인되지 않은 상태";
        }
    }
}
 
 

7. 로그아웃 컨트롤러 생성: 세션을 무효화하여 로그아웃 처리를 하는 컨트롤러를 만듭니다.

 
// LogoutController.java
@RestController
public class LogoutController {

    @PostMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate(); // 세션 무효화
        return "로그아웃 성공";
    }
}
 
 

8. 인터셉터 (선택 사항): 특정 페이지에 대한 접근 제어를 위해 인터셉터를 사용할 수 있습니다. 로그인 여부를 확인하여 로그인되지 않은 사용자의 접근을 막을 수 있습니다.

 

9. 보안 강화: 실제 서비스에서는 다음과 같은 보안 강화 조치를 적용해야 합니다.

  • HTTPS 사용
  • 비밀번호 암호화 저장
  • CSRF (Cross-Site Request Forgery) 공격 방어
  • 세션 하이재킹 방어

10. 테스트: 로그인, 로그아웃, 세션 정보 확인 기능을 테스트하여 정상적으로 동작하는지 확인합니다.

주의 사항:

  • 세션은 서버 메모리에 저장되므로, 서버 확장성에 제약이 있을 수 있습니다.
  • 대규모 서비스에서는 Redis, Memcached 등 외부 세션 저장소를 사용하는 것이 좋습니다.

댓글