Spring

Spring - Filter / Interceptor

J휘 2024. 10. 18. 17:25

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()**이 동작합니다.

자세한 요청 처리 순서

  1. 클라이언트 요청이 들어옴.
  2. **필터(Filter)**가 있으면, 필터가 먼저 실행됩니다.
  3. DispatcherServlet이 요청을 받음.
  4. DispatcherServlet은 요청에 해당하는 **핸들러(Controller)**를 찾기 위해 HandlerMapping을 사용합니다.
    • 이 과정에서 적절한 **컨트롤러(핸들러)**를 찾습니다.
  5. **핸들러(Controller)**를 찾고, 그 핸들러를 처리할 수 있는 적절한 HandlerAdapter를 결정합니다.
  6. HandlerAdapter를 통해 컨트롤러를 호출하기 전에, **인터셉터의 preHandle()**이 호출됩니다.
  7. 인터셉터의 preHandle()이 요청을 처리하고, 그 결과에 따라 컨트롤러로 요청을 넘길지 여부를 결정합니다.
    • true를 반환하면 컨트롤러가 실행되고,
    • false를 반환하면 요청 처리가 중단됩니다.
  8. 컨트롤러가 요청을 처리합니다.
  9. 컨트롤러가 처리를 완료한 후, **인터셉터의 postHandle()**이 호출됩니다.
  10. 뷰 렌더링이 완료된 후, **인터셉터의 afterCompletion()**이 호출됩니다.
  11. 최종 응답이 클라이언트로 전송됩니다.