로그인 (checkMembers 메서드)
- ❌ 제거: 기존 세션 invalidate 로직
- ✅ 추가: 새로운 세션 생성 (기존 세션 유지)
- 결과: 여러 사용자 동시 로그인 가능
로그아웃 (member_logout 메서드)
- ❌ 제거: 불필요한 새 세션 생성
- ✅ 개선: 현재 사용자의 세션만 제거
- 결과: 다른 사용자 세션에 영향 없음
핵심 코드 변경:
// 로그인: 기존 세션 강제 종료 제거
// 대신 새 세션만 생성
HttpSession newSession = request2.getSession(true);
// 로그아웃: 현재 사용자의 세션만 종료
if (session != null) {
session.invalidate(); // 이 사용자의 세션만 제거
}기능:
- ✅ 단일 파일 업로드
- ✅ 다중 파일 업로드 (최대 2개)
- ✅ 파일 크기 검증 (10MB 제한)
- ✅ 파일 타입 검증 (화이트리스트)
- ✅ 파일명 중복 감지 및 자동 이름 변경 (타임스탐프)
- ✅ 상세한 에러 메시지
허용 파일 타입:
txt, pdf, doc, docx, xls, xlsx, ppt, pptx,
jpg, jpeg, png, gif, zip, rar
중복 파일명 처리:
원본: document.pdf
중복: document_20231213_143022_123.pdf ← 타임스탐프 추가
기능:
- 사용자 이메일
- 파일 1, 2 (최대 2개)
- 파일 배열 반환 유틸리티 메서드
새로운 엔드포인트:
POST /upload-files
- 최대 2개 파일 업로드
- 사용자별 디렉토리 생성
- FileUploadService 사용
- 에러 처리 및 에러 페이지 표시
기존 엔드포인트 (유지):
POST /upload-email
- 이메일 콘텐츠 텍스트 파일 저장
파일: error_page/file_upload_error.html
기능:
- 에러 타입 표시 (NO_FILE, VALIDATION_ERROR, UPLOAD_ERROR)
- 상세 에러 메시지
- 해결 방법 안내
- 돌아가기/홈 버튼
기능:
- 다중 파일 선택 UI
- 파일 정보 표시 (크기 등)
- 클라이언트 측 검증
- 사용자 친화적 안내
- MemberController.java - 세션 처리 로직 수정
- FileController.java - 다중 파일 업로드 엔드포인트 추가
- FileUploadService.java - 파일 업로드 서비스
- FileUploadRequest.java - 파일 업로드 요청 모델
- error_page/file_upload_error.html - 에러 페이지
- file_upload_form.html - 업로드 예제 페이지
- FILE_UPLOAD_AND_SESSION_IMPROVEMENTS.md - 상세 문서
- application.properties - 파일 업로드 설정 이미 존재
- pom.xml - Lombok 의존성 이미 포함
사용자 A (alice@example.com) 로그인
↓
사용자 B (bob@example.com) 로그인 (A 로그인 상태 유지)
↓
A, B 모두 동시에 접근 가능
↓
A 로그아웃 → B는 여전히 로그인
<form action="/upload-files" method="post" enctype="multipart/form-data">
<input type="email" name="userEmail" required />
<input type="file" name="file1" required />
<input type="file" name="file2" />
<button type="submit">업로드</button>
</form>또는 제공된 예제 페이지: /file_upload_form.html
사용자 요청
↓
MemberController (로그인/로그아웃)
├─ checkMembers() → 새 세션 생성
└─ member_logout() → 현재 사용자 세션만 제거
FileController (파일 업로드)
└─ uploadMultipleFiles()
↓
FileUploadService
├─ uploadFiles() → 다중 파일 처리
├─ validateFile() → 크기/타입 검증
├─ handleDuplicateFilename() → 자동 이름 변경
└─ 에러 처리 → error_page/file_upload_error.html
✅ 세션 보안
- UUID 기반 고유 세션 ID
- 5분 세션 타임아웃
- HTTPS 쿠키 안전 전송
✅ 파일 업로드 보안
- 파일명 검증 (경로 조작 방지)
- 파일 타입 화이트리스트
- 파일 크기 제한
- 사용자별 독립 디렉토리
- 여러 사용자 동시 로그인
- 각 사용자 로그아웃 시 다른 사용자 세션 유지
- 1개 파일 업로드
- 2개 파일 동시 업로드
- 3개 파일 업로드 거부
- 파일 크기 제한 작동
- 허용되지 않는 파일 타입 거부
- 중복 파일명 자동 이름 변경
- 에러 페이지 표시
- 사용자별 디렉토리 분리
Q: 파일 업로드가 안 됩니다 A: 다음을 확인하세요
- 파일 크기가 10MB 이하인가?
- 허용된 파일 타입인가?
- 최대 2개까지만 선택했나?
Q: 로그인 후 다른 사용자가 로그아웃됩니다 A: 업데이트된 MemberController가 적용되었는지 확인
- 새 세션은 생성되나요? (invalidate() 제거)
- 로그인 중복 테스트: 2명 동시 로그인 후 한 명만 로그아웃
- 상세 문서: FILE_UPLOAD_AND_SESSION_IMPROVEMENTS.md
- FileUploadService 코드: FileUploadService.java
- 예제 페이지: file_upload_form.html
작성일: 2024년 12월 13일
상태: ✅ 완료 및 프로덕션 준비