복붙노트

[SPRING] http 요청 인터셉터를 추가하는 스프링 부트

SPRING

http 요청 인터셉터를 추가하는 스프링 부트

스프링 부트 응용 프로그램에 Http Request 인터셉터를 추가하는 올바른 방법은 무엇입니까? 내가 원하는 것은 로그 요청과 모든 http 요청에 대한 응답입니다.

스프링 부트 문서는이 주제를 전혀 다루지 않습니다. (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/)

예전 버전의 스프링에서 동일한 작업을 수행하는 방법에 대한 웹 샘플을 찾았으나 applicationcontext.xml과 함께 작동합니다. 도와주세요.

해결법

  1. ==============================

    1.스프링 부트를 사용하고 있기 때문에 가능하다면 스프링의 자동 설정에 의존하기를 원한다고 가정합니다. 인터셉터와 같은 사용자 정의 구성을 추가하려면 WebMvcConfigurerAdapter의 구성 또는 bean을 제공하면됩니다.

    스프링 부트를 사용하고 있기 때문에 가능하다면 스프링의 자동 설정에 의존하기를 원한다고 가정합니다. 인터셉터와 같은 사용자 정의 구성을 추가하려면 WebMvcConfigurerAdapter의 구성 또는 bean을 제공하면됩니다.

    다음은 config 클래스의 예입니다.

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
      @Autowired 
      HandlerInterceptor yourInjectedInterceptor;
    
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(...)
        ...
        registry.addInterceptor(getYourInterceptor()); 
        registry.addInterceptor(yourInjectedInterceptor);
        // next two should be avoid -- tightly coupled and not very testable
        registry.addInterceptor(new YourInterceptor());
        registry.addInterceptor(new HandlerInterceptor() {
            ...
        });
      }
    }
    

    참고 mvc에 Spring Boots 자동 설정을 유지하려면 @EnableWebMvc로 주석을 달지 마십시오.

  2. ==============================

    2.WebMvcConfigurerAdapter는 Spring 5에서 사용되지 않을 예정입니다. Javadoc :

    WebMvcConfigurerAdapter는 Spring 5에서 사용되지 않을 예정입니다. Javadoc :

    위에서 설명한 것처럼 WebMvcConfigurer를 구현하고 addInterceptors 메서드를 재정의해야합니다.

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyCustomInterceptor());
        }
    }
    
  3. ==============================

    3.스프링 부트 응용 프로그램에 인터셉터를 추가하려면 다음을 수행하십시오.

    스프링 부트 응용 프로그램에 인터셉터를 추가하려면 다음을 수행하십시오.

  4. ==============================

    4.또한 SpringSandwich 종속성을 추가하여 컨트롤러에 적용 할 인터셉터를 직접 주석 할 수 있습니다. URL 경로에 주석을 추가하는 것과 같은 방법으로 (인터셉터 : 저자입니다).

    또한 SpringSandwich 종속성을 추가하여 컨트롤러에 적용 할 인터셉터를 직접 주석 할 수 있습니다. URL 경로에 주석을 추가하는 것과 같은 방법으로 (인터셉터 : 저자입니다).

    https://github.com/arikast/springsandwich

  5. ==============================

    5.WebMvcConfigurerAdapter와 동일한 문제가 더 이상 사용되지 않습니다. 예제를 검색 할 때 구현 된 코드를 거의 찾지 못했습니다. 여기에 작업 코드가 있습니다.

    WebMvcConfigurerAdapter와 동일한 문제가 더 이상 사용되지 않습니다. 예제를 검색 할 때 구현 된 코드를 거의 찾지 못했습니다. 여기에 작업 코드가 있습니다.

    HandlerInterceptorAdapter를 확장하는 클래스를 만듭니다.

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    import me.rajnarayanan.datatest.DataTestApplication;
    @Component
    public class EmployeeInterceptor extends HandlerInterceptorAdapter {
        private static final Logger logger = LoggerFactory.getLogger(DataTestApplication.class);
        @Override
        public boolean preHandle(HttpServletRequest request, 
                HttpServletResponse response, Object handler) throws Exception {
    
                String x = request.getMethod();
                logger.info(x + "intercepted");
            return true;
        }
    
    }
    

    다음 구현 WebMvcConfigurer 인터페이스

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import me.rajnarayanan.datatest.interceptor.EmployeeInterceptor;
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Autowired
        EmployeeInterceptor employeeInterceptor ;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry){
            registry.addInterceptor(employeeInterceptor).addPathPatterns("/employee");
        }
    }
    
  6. from https://stackoverflow.com/questions/31082981/spring-boot-adding-http-request-interceptors by cc-by-sa and MIT license