[Spirng] Interceptor

김탁형·2024년 9월 29일

interceptor는 Controller(Handler) 로 가기전에 요청을 가로채는 preHandle, controller 처리 후 postHandle, 마지막으로 전체 요청이 끝난 후 처리되는 afterCompletion 으로 이루어져 있다. 이러한 Spring Interceptor는 Handler의 역할을 하는 controller로 가기전에 가로채기 때문에 정식 명칙은 HandlerInterceptor이다.

AuthInterceptor.java

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class AuthInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        return false;
    }

    @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 사용을 위해서는 Interceptor와 Interceptor를 등록하기 위한 Config가 필요하다.

WebConfig.java

import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {

    private final HandlerInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns();
    }
}

interceptor 등록을 위한 Config 파일이다. @Component로 Bean으로 등록된 Interceptor를 가져와 registry에 등록해준다.

addPathPatterns은 interceptor를 적용할 pattern에 대해 적는 공간이고, excludePathPatterns은 제외할 pattern을 적어두는 공간이다. 각 controller에 있는 메소드에 annotation으로 권한을 확인할 것이기 때문에 모든 pattern에 대해 열어두었다.

++ 사용예시 작성예정

profile
김탁형/성남/31

0개의 댓글