Spring

Spring boot interceptor 예제

기록만이살길 2020. 6. 17. 21:10
반응형

스프링 부트 인터셉터 예제

이 페이지에서는 Spring Boot에서 인터셉터를 사용하는 방법을 보여줍니다. 공통 비즈니스 로직을 처리하는 인터셉터를 사용할 수 있습니다. 프로젝트의 구조는 다음과 같습니다.

├─main
│  ├─java
│  │  └─com
│  │      └─henryxi
│  │          └─interceptor
│  │                  AppConfig.java
│  │                  SampleController.java
│  │                  TestInterceptor.java
│  │
│  └─resources
│          application.properties
│
└─test
    └─java

pom 파일의 내용

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.0.RELEASE</version>
</dependency>

AppConfig.java

@EnableAutoConfiguration
@Configuration
@ComponentScan("com.henryxi.interceptor")
public class AppConfig extends WebMvcConfigurerAdapter {

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/intercept");
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(AppConfig.class, args);
    }
}

TestInterceptor.java

@Component
public class TestInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("this is interceptor, preHandle method");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
        System.out.println("this is interceptor, postHandle method");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("this is interceptor, afterCompletion method");
    }
}

SampleController.java

@Controller
public class SampleController extends SpringBootServletInitializer {

    @RequestMapping("/intercept")
    @ResponseBody
    public String intercept() {
        System.out.println("this is controller, request path is intercept");
        return "hello spring boot interceptor, request path is intercept";
    }

    @RequestMapping("/not-intercept")
    @ResponseBody
    public String notIntercept() {
        System.out.println("this is controller, request path is not intercept");
        return "hello spring boot interceptor, request path is not intercept";
    }
}

AppConfig클래스 에서 메인 메소드를 실행하고 "localhost : 8080 / intercept"에 액세스하십시오. 다음과 같은 로그를 볼 수 있습니다.

this is interceptor, preHandle method
this is controller, request path is intercept
this is interceptor, postHandle method
this is interceptor, afterCompletion method

"localhost : 8090 / not-intercept"에 액세스하십시오. 다음과 같은 로그.

this is controller, request path is not intercept

인터셉터에 고유 한 비즈니스 로직을 추가 할 수 있습니다.

반응형