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 등 외부 세션 저장소를 사용하는 것이 좋습니다.
'Coding 공부 > IntelliJ' 카테고리의 다른 글
[SpringBoot_MariaDB] 파일 업로드 코드 추가 (0) | 2024.06.11 |
---|---|
[IntelliJ] 스프링부트 파일 업로트 설정, Multipart (0) | 2024.06.11 |
[IntelliJ_SpringBoot] consumes, HTML <form>태그 기본 속성 (0) | 2024.05.31 |
[IntelliJ_Springboot] Springboot 자원 자동 서빙, 리다이렉트 vs 뷰 반환 방식 (0) | 2024.05.29 |
[IntelliJ_Springboot_MariaDB] read.html 코드, reply.js 코드, Axos 매개변수의 타입 (0) | 2024.05.29 |
댓글