반응형

스프링 프로젝트를 구성하여 개발하다보면 사용자가 로그인이 되었는지 접근이 가능한 사용자인지 보안토큰이나 불필요한 파라미터나 파일등을 전송중인지 여러가지를 앞단에서 먼저 체크하고 통과시키거나 멈추게하는 기능을 처리 할 수 있는데, 필터 또는 인터셉터를 사용하여 처리가 가능합니다.

 

 

이 중에 컨트롤러에 도착하기전 먼저 계정의 세션정보나 접근레벨등을 처리하기 위한 인터셉터 적용법을 알아볼건데, 가로채다라는 뜻이 있듯이 컨트롤러에 도착하기전 데이터를 가로채서 요청한 데이터의 정보를 확인하여 해당 요청의 진행 유무를 판단할수있습니다.

 

 

먼저 스프링에서 요청이 발생했을때의 Life Cycle을 보시면 아래와 같습니다.

 

Filter와 Interceptor의 차이로 Dispatcher Servlet의 앞단에서 처리하냐, 뒷단에서 처리하냐의 차이가 존재합니다.

그림을 보시면 아시겠지만 Filter는 Servlet의 앞단에서 처리하며, Interceptor는 뒷단에서 처리합니다.

 

그럼 이제 적용방법과 사용법을 알아보겠습니다.

 

 

Interceptor 적용하기

구성환경

- STS4

- Java8

 

 

Interceptor 구성

먼저 interface HandlerInterceptor를 상속받아서 Interceptor를 구성합니다.

* sts4 기준으로 java8을 사용하며 HandlerInterceptor를 사용합니다. 기존에 상속받아서 사용하던 추상클래스HandlerInterceptorAdapter는 "Deprecated." 처리되었습니다.

public class AdminInterceptor implements HandlerInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, @Nullable Exception arg3) throws Exception {
	}
}

-preHandler : 컨트롤러에 도착하기전에 동작하는 메소드로 return값이 true이면 진행, false이면 멈춥니다.

-postHandler : 컨트롤러에 도착하여 view가 랜더링되기 전에 동작합니다.

-afterCompletion: view가 정상적으로 랜더링된 후에 마지막에 실행됩니다.

 

 

WebWebMvcConfigurer를 통한 Interceptor 설정

* sts4 java8 WebMvcConfigurer를 사용합니다. 기존에 상속받아서 사용하던 추상클래스 WebMvcConfigurerAdapter는 "Deprecated." 처리되었습니다.

@Configuration
public class ServerConfigure implements WebMvcConfigurer{
	private static final List<String> URL_PATTERNS = Arrays.asList("/async/*", "/board", "/user");  //인터셉터가 동작 해야 될 요청 주소 mapping 목록
	
	//인터셉터 주소 세팅
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new AdminInterceptor()).addPathPatterns(URL_PATTERNS);
	}
}

SpringLegacy에서는 servlet-context.xml에서 맵핑할 정보와 어떤 인터셉터를 적용할건지 처리를 하곤 했는데, 부트에서는 java를 통해 설정을 진행합니다.

 

addIntercepotrs를 통해 사용할 Interceptor를 등록하고. 패턴을 등록해줍니다.

-addPathPatterns : 해당 메소드는 동작해야할 url패턴을 설정합니다.

-excludePathPatterns: 해당 메소드는 적용한 인터셉터에서 제외할 url패턴을 설정합니다.

 

 

이상으로 springboot에서 Interceptor 적용법을 알아보았습니다.

 

반응형