interceptor / 인터셉터 / 회원정보 체크 / 로그인 체크 | spring

2016.01.05 15:54framework/spring

interceptor 를 사용하는 예제이다.

 

 

 

홈페이지를 만들다 보면 여러 시점에서 특정 기능을 수행하여야 할 경우가 생긴다.

 

대표적인 함수로는 Filter Interceptor가 있다.

 

하지만 이 두 함수는 호출하는 시점이 다르다.

 

Filter 는 Dispatcher 가 호출되기 전에 실행하고, Interceptor는 Dispatcher이 호출된 후에 실행된다.

 

Interceptor는

org.springframework.web.servlet.handler.HandlerInterceptorAdapter를 상속받아서 Interceptor을 구현한다.

 

그리고 총 3가지의 함수를 제공한다.

 

perHandle() : Controller가 실행되기 전에 호출 / boolean으로 return하며 Controller을 실행 여부를 결정

postHandle() : Controller가 실행된 후 View를 호출하기 전에 실행

afterCompletion() : View 작업까지 마치고 호출 / responseBody를 이용할 경우 값을 View에 전달 후 호출

 

 

간단한 이론을 마치고

 

내가 Interceptor을 사용하게 된 이유는 특정 페이지마다 권한을 체크해야 할 경우가 생겼다.

 

시점은 당연히 perHandle (컨트롤러가 실행되기 전) 이다.

 

 



 

 

 

1 ) dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="0">
     <!-- 모든 @Controller에 인터셉터 등록 -->
      <property name="interceptors">
   <list>
    <ref bean="checkInterceptor"/>
   </list>
  </property>
    </bean>
 
 
<bean id="checkInterceptor" class="go.kr.CheckInterceptor" >
  <!-- 인증 체크가 필요 없는 URL 리스트  -->
  <property name="urls">
   <list>
    <value>/login/login.do</value>
    <value>/index.do.*</value>
    <value>/logout/logout.do</value>
    <value>/logout/logout.do</value>
    <value>/login.do</value>
   </list>
  </property>
 </bean>
 
cs

 



2 ) CheckInterceptor.java

public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
 
//  인증 체크가 필요 없는 URL 리스트  
 
List<String> urls;
 
 public void setUrls(List urls) {
  this.urls = urls;
 }
 
 
@Override
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler) throws Exception {
   // 기능을 수행하고 Controller를 실행 하려면
 
   // return true;
 
  
 
   // 특정 체크에서 일치하지 않는다면
 
   // response.sendRedirect("특정 에러 페이지로 보낸다");
 
   // return false;
 
 
 
// 인증 체크가 필요 없는 URL 체크
 
  for(int i=0; i < urls.size(); i++){
 
    if (request.getRequestURI().matches(urls.get(i))) {
      ) {
    System.out.println("== 인증 체크가 필요 없는 URL ============================");
    System.out.println("== URL : "+ urls.get(i) +" ============================");
    System.out.println("== return true ============================");
    System.out.println("== 인터셉터 종료 ============================");
    return true;
   }
 
 
   // 첫페이지가 로그인 페이지일 경우
 
   // 첫페이지 jsession때문에 request.getRequestURI().indexOf("/login/login.do") != -1 사용
 
   if(request.getRequestURI().indexOf(urls.get(i)) != -1){
 
     return true;
 
   }
 
  
  }
 
 
// 세션이 있는지 체크
 
// 세션에 로그인한 정보가 있는지 체크
 
 
return true;
 }
 
 
}
 
cs

 

 

 

도움이 되셨다면 공감을 부탁드립니다. ^^