0

Spring Data Rest와 JPA가있는 프로젝트에서 작업 중이며 HTTP 인터셉터를 구성하려고합니다.Spring Data REST URL에서 Spring 인터셉터가 작동하지 않습니다.

@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    DBEditorTenantInterceptor dbEditorTenantInterceptor; 

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

} 

Spring Web MVC Docs - Config Interceptors에서 설명한 바와 같이 (다음

@Component 
public class DBEditorTenantInterceptor extends HandlerInterceptorAdapter { 

    Logger logger = LoggerFactory.getLogger(DBEditorTenantInterceptor.class); 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws Exception { 
     logger.debug("********** INTERCEPTION SUCCESSFUL **********"); 
     return true; 
    } 
} 

및 WebMvcConfig를 확장하여 인터셉터 등록 : 참조 문서 당으로 Spring Web MVC Docs - Handler Mapping Interceptor 가능 는, I는 다음과 같이 HandlerInterceptorAdapter 확장 컴포넌트를 만들어/helloworld와 같은 Spring Data REST에서 사용하지 않는 URL에 HTTP 요청을 발행합니다. 로거 출력을 보면 예상대로 인터셉터가 작동합니다.

017-10-26 13:16:24.689 DEBUG 17012 --- [p-nio-80-exec-4] c.c.v.d.DBEditorTenantInterceptor  : ********** INTERCEPTION SUCCESSFUL ********** 

그러나 스프링 데이터 휴식으로 URL을 사용하면 인터셉터가 호출되지 않습니다. 이는/api/{모델의 기존 엔티티}에 적용됩니다.

스프링 데이터 나머지 URL에 대해 인터셉터가 호출되지 않는 이유는 무엇입니까? 모든 요청에 ​​대해 인터셉터를 작동 시키려면 어떻게해야합니까?

미리 감사드립니다.

답변

1

MappedInterceptor 유형의 Bean을 선언하고 Interceptor (HandlerInterceptorAdapter를 확장)를 삽입함으로써 Spring 데이터 나머지에 의해 인터셉터가 선택되었고 이제 애플리케이션의 모든 URL에서 작동합니다.

이 다음 구현 (내 원래의 질문에 하나를 교체)로 번역 :

@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    DBEditorTenantInterceptor dbEditorTenantInterceptor; 

    @Bean 
    public MappedInterceptor dbEditorTenantInterceptor() { 
     return new MappedInterceptor(new String[]{"/**"}, dbEditorTenantInterceptor); 
    } 

} 

불행하게도, 나는 봄 문서에이에 대한 참조를 찾을 수 없습니다.

관련 문제