Spring

MappedInterceptor를 이용한 Interceptor 등록

Arthur Kim 2021. 10. 6. 15:50

CelloInterceptor파일에는 httpRequest에 개입하기위해 HandlerInterceptor 인터페이스를 상속받아 preHandler와 postHandler를 override한 메소드들이 있습니다.

public class CelloInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception 
    {
    }

    @Override
    public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler,
                            ModelAndView modelAndView ) throws Exception
    {
    }

    @Override
    public void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex )
            throws Exception
    {

    }

}

일반적으로 interceptor를 등록하기 위해서는 WebMvcConfigurerAdaptor를 상속받은 Configuration클래스에서
addInterceptor를 override하여 등록하여야합니다.

@Configuration
public class WebMvcConfig extends WebWvcConfigurerAdapter {

    @Override
    public void addInterceptors( InterceptorRegistry registry ) {
        registry.addInterceptor( new CelloInterceptor )
                .addPathPattern("/*");
    }

}

하지만 MappedInterceptor를 이용하여 일반 Configuration에서 MappedIntercepor의 반환값을 Bean으로 등록하면 Intercepter로 사용가능합니다.


다만, 새롭게 정의된 MappedInterceptor의 우선순위를 위해 Order를 0으로 지정해둡니다 ( @Bean의 디폴트 Order 값은 Ordered.LOWEST_PRECEDENCE, 2147483647 입니다. )

@Order 는 가장 낮은 숫자가 실행 순서가 가장 빠름

@Configuration
public class CelloApplicationConfig
{
    @Bean
    @Order(0)
    public MappedInterceptor celloInterceptor() {
        return new MappedInterceptor( new String[]{ "/**" }, new CelloInterceptor( celloInitInfoVo.getJwtSecretKey(), celloInitInfoVo.isAllowPerformanceServiceLog() ) );
    }
}