HandlerInterceptor
- Controller가 실행되기 전/후에 낚아채서 실행된다.
- 로그인 유/무 판단, 회원권한 체크
preHandle(전처리) : DispatcherServlet과 Controller 사이에 호출하기 전에 아채는 영역
postHandle(후처리): 컨트롤러에서 요청 후 DispatcherServlet으로 view정보를 리턴하려는 순간 낚아채는 영역
핸들러의 return -> true 이면 기존 요청 흐름대로 진행(Controller로 이동)
-> flase 이면 요청 중단 후 반환
HttpSession session = request.getSession();
if(session.getAttribute("loginUser" != null){
return true; //필터 통과
}else{
session.setAttribute("alertMsg", "로그인 후 이용가능한 서비스");
response.sendRedirect(request.getContextPath());
return false;
//일단 복붙! 나중에정리 ㄱ
인터셉터가 실행되는 시점은 DispatcherServlet이 핸들러(Controller)를 찾은 후입니다. 다시 말해, 핸들러 어댑터를 이용해서 컨트롤러를 찾은 후에 인터셉터가 실행됩니다.
Spring MVC의 요청 처리 과정에서 핸들러(Controller)를 찾고, 그 핸들러에 맞는 어댑터를 결정한 후에 인터셉터가 실행되며, 컨트롤러 호출 전에 **preHandle()**이 동작합니다.
자세한 요청 처리 순서
- 클라이언트 요청이 들어옴.
- **필터(Filter)**가 있으면, 필터가 먼저 실행됩니다.
- DispatcherServlet이 요청을 받음.
- DispatcherServlet은 요청에 해당하는 **핸들러(Controller)**를 찾기 위해 HandlerMapping을 사용합니다.
- 이 과정에서 적절한 **컨트롤러(핸들러)**를 찾습니다.
- **핸들러(Controller)**를 찾고, 그 핸들러를 처리할 수 있는 적절한 HandlerAdapter를 결정합니다.
- HandlerAdapter를 통해 컨트롤러를 호출하기 전에, **인터셉터의 preHandle()**이 호출됩니다.
- 인터셉터의 preHandle()이 요청을 처리하고, 그 결과에 따라 컨트롤러로 요청을 넘길지 여부를 결정합니다.
- true를 반환하면 컨트롤러가 실행되고,
- false를 반환하면 요청 처리가 중단됩니다.
- 컨트롤러가 요청을 처리합니다.
- 컨트롤러가 처리를 완료한 후, **인터셉터의 postHandle()**이 호출됩니다.
- 뷰 렌더링이 완료된 후, **인터셉터의 afterCompletion()**이 호출됩니다.
- 최종 응답이 클라이언트로 전송됩니다.
'Spring' 카테고리의 다른 글
@ResponseBody (0) | 2024.10.30 |
---|---|
Spring - Cookie (0) | 2024.10.18 |
Spring 개념정리(DispatcherServlet, 매개변수 바인딩, DB 커넥트풀, 싱글톤 패턴) (0) | 2024.10.18 |
Spring의 의존성 주입(feat. Bean) (2) | 2024.10.16 |
Spring의 요청/응답 처리 방법 (0) | 2024.10.08 |