티스토리 뷰
이상하게.. 세션, 즉, 중복로그인 처리 로직 중에서 에러가 나는 부분이 있었다. 삽질을 오래 하다가.. 세션 null 처리 때문이 원인인것을 알아냈다.
단순하게 세션이 null 만 체크하면 안된다. 세션이 null 이 아니면 continue 처리를 했는데, null이 아닌데 그 안에 요소를 접근하려고 하니 IllegalStateException 이 발생하였다. continue를 하려면 IllegalStateException에서 해야 한다.
null은 아니지만 그 안의 요소를 null 인듯 하다. 그러니 세션 null 만 처리 하면 안된다.
if (oldSession != null) {
try {
// 톰캣 9 이상에서는 만료된 세션일 경우 아래 메서드 실행 시 즉시 예외가 발생합니다.
java.util.Enumeration<String> names = oldSession.getAttributeNames();
System.out.println("=== HttpSession Attribute List ===");
java.util.Collections.list(names).forEach(name -> {
Object value = oldSession.getAttribute(name);
System.out.printf("Key: %s | Value: %s%n", name, value);
});
System.out.println("==================================");
} catch (IllegalStateException e) {
// 💡 톰캣이 세션을 이미 만료시켰다고 판단한 경우, 에러로 튕기지 않고 안전하게 스킵합니다.
System.out.println("[안내] 현재 oldSession이 이미 만료/무효화된 세션이므로 조회를 건너뜁니다.");
// continue; // 만약 반복문(for/while) 내부라면 다음 루프로 넘어가도록 continue 실행
}
} else {
System.out.println("oldSession이 null입니다.");
}
HttpSession session = request.getSession();
session.invalidate(); // 👈 세션 알맹이를 파기함 (자물쇠 채움)
// ❌ 여전히 null이 아닙니다! 이 조건문은 통과해버립니다.
if (session == null) {
System.out.println("이 글은 출력되지 않습니다.");
}
// 🚨 알맹이가 파기되었기 때문에 아래 줄에서 IllegalStateException 발생!
String id = session.getId();'자바(Java)' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- XE3
- 플러터
- webix
- 포인터
- ocajp
- JDBC
- xe애드온
- 스크래핑
- KG
- MySQL
- proc
- 프로씨
- 인포믹스
- esql
- EC
- 자바
- php
- 파싱
- 파이썬
- 문자열
- 자바 smtp
- ocjap
- XE
- Python
- xe addon
- 오라클
- C
- C언어
- 이클립스
- 라이믹스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함

