장쫄깃 기술블로그

[Spring Boot] Interceptor 설정 본문

Spring Framework/Spring Boot

[Spring Boot] Interceptor 설정

장쫄깃 2022. 4. 15. 15:54
728x90


Interceptor에 대한 설명은 해당 글을 참고

링크 : https://jangjjolkit.tistory.com/6

 

[Spring Boot] Filter, Interceptor, AOP

들어가며 자바 웹 개발을 하다보면, 공통적으로 처리해야할 업무들이 많다. 예를들어 로그인, 권한, XSS, pc/mobile 등 사용자 agent 체크, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코

jangjjolkit.tistory.com


1. HandlerInterceptorAdapter를 상속받아 인터셉터 구현하기


스프링에서 인터셉터는 HandlerInterceptorAdapter를 상속받아 구현할 수 있다.

해당 클래스는 preHandle, postHandle, afterCompletion, afterConcurrentHandlingStarted를 포함하고 있다.

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    • 지정된 컨트롤러의 동작 이전에 수행할 동작 (사전 제어)
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    • 지정된 컨트롤러의 동작 이후에 수행할 동작 (사후 제어)
    • Spring MVC의 Dispatcher Servlet이 화면을 처리하기 전에 동착
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    • Dispatcher Servlet의 화면 처리가 완료된 이후 처리할 동착
  • afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
    • 비동기 요청 시 다른 메소드가 수행되지 않고 해당 메소드가 수행됨
public class SomeInterceptor extends HandlerInterceptorAdapter {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		// ....
		return super.preHandle(request, response, handler);
	}
    
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		// ...
		super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		// ...
		super.afterCompletion(request, response, handler, ex);
	}

	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		// ...
		super.afterConcurrentHandlingStarted(request, response, handler);
	}
}

원하는 타이밍에 맞게 해당 메소드에 구현하면 된다.

 

 

2. HandlerInterceptorAdapter 구현 클래스를 빈(Bean)으로 등록하기


WebMvcConfigurer를 상속받는 Configuration 클래스를 생성하고 addInterceptors 메소드를 오버라이딩하고, 원하는 방식으로 구현한다.

@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new SomeInterceptor())
			.addPathPatterns("/**") // 적용할 url 패턴
			.excludePathPatterns("/some"); // 제외할 url 패턴
	}
}
  • addPathPatterns: 인터셉터가 적용될 url 패턴
  • excludePathPatterns: 인터셉터 적용에서 제외될 url 패턴
728x90