24.11.05(Interceptor, 로그아웃)

Interceptor
- 요청 처리 흐름에 개입하여 특정 작업을 수행하도록 지원하는 기능
- 특정 URL에 대해 공통적인 작업 구현
- 중복 코드 줄이고 관심사 분리에 유용
- 예 : 인증, 권한, 로깅, 요청 데이터 전처리 등 처리
- 구조
- HandlerInterceptor 인터페이스 구현 or HandlerInterceptorAdapter 클래스 상속
- preHandle 메서드
- 컨트롤러에 요청이 전달되기 전에 호출
- 이 메서드에서 false를 반환하면 요청 처리 중단, true를 반환하면 요청 처리 계속
- 주로 사용 : 인증, 권한 확인, 요청 데이터 유효성 검사

- postHandle 메서드
- 컨트롤러가 요청을 처리한 후에 호출
- 뷰가 렌더링되기 전 단계에서 추가 작업을 수행할 수 있음
- 주로 사용 : 모델에 데이터 추가, 비즈니스 로직 후 처리

- aftercompletion 메서드
- 뷰가 렌더링된 후 호출, 리소스를 해제하거나 예외 처리 수행 가능
- 주로 사용 : 로깅, 세션 종료, 리소스 정리
- 흐름 예시
- 클라이언트가 요청을 보냄
- preHandle : 요청이 컨트롤러로 전달되기 전에 호출(여기서 false를 반환하면 요청 중단)
- 컨트롤러가 요청을 처리하고 Model, View 반환
- postHandle : 컨트롤러가 요청을 처리한 후 뷰가 렌더링되기 전에 호출
- 뷰가 클라이언트에게 렌더링
- afterCompletion : 뷰 렌더링이 완료된 후 호출
- 활용 사례
- 로그인 검증
- 로그인된 사용자만 접근할 수 있는 페이지에 대해 로그인 여부 확인
- 로그인되지 않았다면 로그인 페이지로 리다이렉트
- 권한 확인
- 특정 역할을 가진 사용자에게만 특정 기능을 허용하기 위한 권한 확인
- 로깅 및 분석
- 요청 및 응답 정보를 로깅하여 트래픽 분석과 오류 추적에 사용
- API 제한
- 클라이언트의 API 요청 횟수를 제한하여 트래픽 제어
- 주의사항
- postHandle과 afterCompletion
- postHandle은 예외 발생 시 호출되지 않으므로, 예외 처리는 주로 afterCompletion에서 수행하는 것이 안전
- 세션 및 리소스 관리
- 세션과 자원을 잘 정리하여 메모리 누수 문제 방지
로그아웃

- session에 저장된 midx 속성 값이 null이 아닐 경우(사용자가 로그인한 상태), memberName세션 속성에 저장된 사용자의 이름을 표시하고 "로그아웃" 메시지 출력