response.sendEroor()호출하면 response내부에는 오류가 발생했다는 상태를 저장해둔다. 그리고 서블릿 컨테이너는 고객에게 응답전에 response에 sendError()가 호출되었는지 확인한다. 만약 호출되었다면 설정한 오류고드에 맞추어 기본 오류페이지를 보여준다.
*본 게시물은 인프런 스프링MVC2편 - 백엔트 웹 개발 활용 기술 강의를 토대로 작성했습니다.
*스프링 인터셉터 제한 HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 스프링 인터셉터 -> 컨트롤러 // 로그인 사용자 HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 스프링 인터셉터(적절치 않은 요청이라 판단, 컨트롤러 호출X) // 비 로그인 사용자 *스프링 인터셉터 체인 HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 인터셉터1 ->인터셉터2 -> 컨트롤러 : 필터와 마찬가지로 중간에 인터셉터 자유롭게 추가할 수 있다.
preHandle: 컨트롤러 호출 전, 호출된다. 응답값이 true면 다음으로 진행하고, false면 진행하지 않는다. postHandle: 컨트롤러 호출 후 afterCompletion: http 요청이 완전히 끝날때, 뷰가 랜더링 된 이후에 호출된다. / 예외가 발생해도 호출된다.
동작방식: 1. 사용자가 로그인, 비밀번호 정보를 저장하면 서버에서 해당 사용자가 맞는지 확인한다. 2. 그럼 서버에서 추정불가능한 랜덤값, 즉 'UUID'를 만든다. 3. 서버는 세션 저장소를 만들고 그 값(UUID)을 토큰 키(sessionId)로 사용한다. 4. 값(value)은 회원객체로 매핑한다. 5. 그렇게 서버에 sessionId와 value가 저장된다. 세션아이디를 알면 회원 객체를 꺼낼 수 있다.
6. 서버는 클라이언트에 'sessionId만 쿠키에 담아서 전달한다. 7. 클라이언트는 쿠키저장소에 sessionId 정보가 담긴 쿠키를 보관한다.
*회원과 관련된 정보는 전혛 클라이언트에 전달되지 않는다. *추정 불가능한 세션id만 쿠미를 통해 클라이언트에 전달한다.
8. 웹브라우저가 특정페이지 들어가면 쿠키를 전달하는데, sessionId 정보를 서버로 전달한다. 9. 서버에서는 세션저장소를 뒤져서 키(sessionId)에 맞는 value(회원객체)가 있는지 확인한다.