본문 바로가기

Back end/Java

로그인 구현시 설정 (interceptor)

728x90

 

interceptor는 controller에 가기전에 가로채는 역할을 하고
'dispatcher-servlet.xml' 에서  설정한다
('bean-class'태그에 로그인관련 파일을 등록한다)


만들어준 로그인관련.Java file에 'HandlerInterceptor'를 implement하여

preHandle(//컨트롤러가 호출되기전에 실행)
postHandle(//컨트롤러가 실행된후 실행)
afterCompletion(//뷰에서 최종결과가 생성하는일을 포함한 모든일이 완료되었을때 실행)
가 Override 되도록 상속받는다

이곳에서 interceptor가 가로챈 request 를  적절히 처리할수있다

dispatcher-servlet.xml

<mvc:interceptors>
  <mvc:interceptor>
    <mvc:mapping path="/admin/*" />
    <mvc:exclude-mapping path="/admin/index.do" />
    <mvc:exclude-mapping path="/admin/login.do" />

    <bean class="testproject.interceptors.LoginAdapterInterceptor" />
  </mvc:interceptor>
</mvc:interceptors>

 

 

로그인관련.Java

public class LoginAdapterInterceptor implements HandlerInterceptor {
//메서드의 반환값이 true인 경우 Handler의 다음 체인이 실행, false인 경우 중단하고 남은 interceptor와 Controller가 실행되지 않는다

   @Override
   public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object arg2, Exception arg3) throws Exception {
   //view 에서 최종결과가 생성하는일을 포함한 모든일이 완료되었을때 실행
   }

   @Override
   public void postHandle(HttpServletRequest request, HttpServletResponse response,Object arg2, ModelAndView arg3) throws Exception {
   //Controller가 실행된후 실행
   }

   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
   //Controller가 호출되기전에 실행
      
      HttpSession session = request.getSession();

      if(session.getAttribute("userId") != null) {
         return true;
      }
      else {
         response.sendRedirect("/admin/index.do");
         return false;
      }
      
   }

}

 

 

728x90