Please Enable JavaScript!
Gon[ Enable JavaScript ]

Spring 에서 interceptors 사용하기

자바(JAVA)
반응형

스프링에 지원해주는 주요개념중에 AOP 가 있다.

어플리케이션 전반에 걸쳐 쓰이는 공통기능을 묶어서 관리하고자 만든개념인데
주로  Logging,
Exception, Transaction, Security 같은 기능이다. 스프링에서 지원하는 클래스로는 아직 미흡한점이 많이 있고 주로 AsceptJ 와 연동해서 많이들 쓴다. 이번주제는 이게 아니므로 생략하고

AOP 개념을 간단하게 쓰기 위해 spring 에서 지원하는 기능을 써보도록 하겠다.


다음과
같이 action-servlet.xml 에서와 같이 SimpleUrlHandlerMapping 클래스에

Interceptiors 값으로 commInterceptor 빈을 넘기면 된다.

빈은 Interceptor 기능을 넣은 클래스가 된다.

 

<bean id="handlerMapping" 
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

   <property name="interceptors">

     <list>

       <ref bean="commInterceptor"/>

     </list>

   </property>

   <property name="mappings">

       <props>

           <prop key="/index.do">boardController</prop>

          <prop key="/front/board/index.do">boardController</prop>

       </props>

   </property>

 

<bean id="commInterceptor" class="common.CommInterceptor"></bean>

 

CommInterceptor HandlerInterceptorAdapter 상속받게 된다.
이클래스는 Adapter
패턴으로 만들어 졌으며 추상클래스 이다. 여기에 정의되어있는 함수는 그대로 사용하면 된다.

함수 명처럼 preHandle 클래스가 시작하는 시점에 적용되고, postHandle 중간에 ,

afterCompletion 마지막에 적용이된다. 자신이 구현하고자 하는 기능을 함수 상속하여

구현해 주면된다.

 

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

public void postHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj, ModelAndView modelandview)

public void afterCompletion(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj, Exception exception)

 


아래의 코드는 회원정보를 세션에서 체크하는 로직이다.

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

  log.debug("========= preHandle Interceptor ========");

  /** Session 회원정보여부 체크 */

  User user = (User)request.getSession().getAttribute("user");

  if (user == null){

    String url = "/login";

    throw new ModelAndViewDefiningException(new ModelAndView(url));

  }

  return super.preHandle(request, response, handler);

}

 

public void postHandle(HttpServletRequest httpservletrequest,
        HttpServletResponse httpservletresponse, 
        Object obj, ModelAndView modelandview)
throws Exception{

  /** request 넘어온 데이타를 가공할때 쓰는 곳이다 */

  log.debug("========= postHandle Interceptor ========");

}

 

public void afterCompletion(HttpServletRequest httpservletrequest, 
       HttpServletResponse httpservletresponse, Object obj,
       Exception exception)
throws Exception{

  /** 공통 Exception 처리를 해주는것이 좋다. 에러 메일을 보내는것등 */

  log.debug("========= afterCompletion Interceptor ========");
}


반응형
Posted by 녹두장군1
,