본문 바로가기

프로그래밍/JAVA & SPRING

[LifeSoft] spring 15강 인터셉터(Interceptor)

반응형

8. Interceptor (인터셉터)

 

가. Interceptor (인터셉터) - 클라이언트의 요청 전후에 특정 작업을 처리하고자 할 때 사용하는 기능

매개변수 = HttpServletRequest. HttpServletResponse

용도 - 로그인 처리, pc웹/모바일웹 분기 처리 등.

코드에서 세션처리를 매번 넣어주었었다.

디바이스의 USERAGENT를 파악해서 이동을 시켜준다.

 

비슷한 기능이 많이 있는데

필터를 보면 인코딩 처리할때 필터를 설정했다.

web.xml의 아래쪽에 보면

모든 url 을 요청할때 스프링이 지원하는 charactor encoding filter가 실행되어서

코드에서 인코딩에 대해 전혀 신경쓰지 않아도 된다.

필터는 선처리만 된다.

 

Request   |    Filter   |    Interceptor   |   AOP

 

Interceptor 는 URL을 기준으로 적용하고.

AOP는 메소드를 기준으로 처리된다.

 

html 페이지는 웹서버에서 별도의 처리를 하지 않고 그대로 클라이언트에게 전달됨.

jsp페이지는 JspServlet 을 경우하여 html로 변환된 후 클라이언트에게 전달.

서블릿(확장자가 html, jsp가 아닌 경우)은 DefaultServlet을 경유하여 전달되는데

Spring Framwork에서는 DispatcherServlet을 경유하여 처리된다.

 

실행순서 : Filter > DispatcherServlet > Interceptor > AOP

 

나. 실습예제

interceptor.SampleInterceptor.java

 

public class SampleInterceptor implements HandlerInterceptor {
 private static final Logger logger = LoggerFactory.getLogger(LogAdvice.class);
 //// main action을 처리하기  전후에 들렀다 간다.: 글쓰기 전 체크, 로그인 체크 전후
 // 요청 전에 경유 (필수는 아니다 선택적으로 적용하면 됨)

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {

  logger.info("pre handle ...... ");

  return true;  // false가 되면 진행되지 않는다.

 }

  // 요청 후에 경유
 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

   ModelAndView modelAndView) throws Exception {
    logger.info("post handle ...... ");
   }
}



2) servlet-context.xml에 인터셉터 관련설정

먼저 인터셉터를 bean으로 설정한 후

<beans:bean id="인터셉터아이디" class="인터셉터 경로" />

어떤 url을 호출했을 때 인터셉터를 작동시킬 것인지 설정해야 합니다.

 

/spring02/shop/** 상품관련 url을 호출할때 인터셉터를 호출하는 코드를 넣어보자

 

<!-- 인터셉터 선언 -->

 <beans:bean id="sampleInterceptor" class="com.example.spring02.interceptor.SampleInterceptor" />

 <!-- 인터셉터와 url 매핑 -->

 <interceptors>

  <interceptor>

   <mapping path="/shop/**" />

   <beans:ref bean="sampleInterceptor"/>

  </interceptor>

 </interceptors>



호출을 ... /spring02/shop/product/list.do 로 했을때

로그가 핵심로직 전후로 실행된다.

pre handle ......

상품목록을 가져오는 로직실행

select * from product order by product_name

post handle ......