복붙노트

[SPRING] 스프링 REST 컨트롤러에서 모든 요청을 차단하는 방법은 무엇입니까?

SPRING

스프링 REST 컨트롤러에서 모든 요청을 차단하는 방법은 무엇입니까?

나는 많은 컨트롤러를 가지고있다 :

@RestController
public class AreaController {
    @RequestMapping(value = "/area", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<Area> get(@RequestParam(value = "id", required = true) Serializable id) { ... }
}

나는 그 (것)들을 도달하는 모든 요구를 차단할 필요가있다,

이 예제와 같은 인터셉터를 만들었습니다.

http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

하지만 결코 들어 가지 않습니다 :(

어노테이션 만 사용하기 때문에 인터셉터를 정의 할 XML이 없습니다. 나는 이것을 다음과 같이 설정했다.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.test.app")
public class AppConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ControllerInterceptor getControllerInterceptor() {
        ControllerInterceptor c = new ControllerInterceptor();
        return c;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getControllerInterceptor());
        super.addInterceptors(registry);
    }

}

나는 무엇을 잘못하고 있는가?

해결법

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

    1.Interceptor 클래스 ControllerInterceptor는 응용 프로그램 컨텍스트 관리 Bean이 아닙니다. ControllerInterceptor에 @Component 주석을 추가하고 패키지를 @ComponentScan에 추가하십시오. 따라서 ControllerInterceptor가 다음과 같이 com.xyz.interceptors 패키지에 있다고 가정 해 보겠습니다.

    Interceptor 클래스 ControllerInterceptor는 응용 프로그램 컨텍스트 관리 Bean이 아닙니다. ControllerInterceptor에 @Component 주석을 추가하고 패키지를 @ComponentScan에 추가하십시오. 따라서 ControllerInterceptor가 다음과 같이 com.xyz.interceptors 패키지에 있다고 가정 해 보겠습니다.

    package com.xyz.interceptors;  //this is your package
    
    @Component //put this annotation here
    public class ControllerInterceptor extends HandlerInterceptorAdapter{
     // code here
    }
    

    AppConfig는 다음과 같습니다.

    @ComponentScan(basePackages = { "com.test.app", "com.xyz.interceptors" })
    public class AppConfig extends WebMvcConfigurerAdapter {
    // ...
    }
    
  2. ==============================

    2.그래서 명백하게 나는 틀린 무엇인가하고 있었다. 그러나 무엇을 말할 수 없다.

    그래서 명백하게 나는 틀린 무엇인가하고 있었다. 그러나 무엇을 말할 수 없다.

    인터셉터를 다음과 같이 정의합니다.

    <mvc:interceptors>
      <bean class="com.test.ControllerInterceptor" />
    </mvc:interceptors> 
    

    나는 당신이 순수한 자바로 정의 할 수 있다고 확신하지만,

    대답은에서 발견 : http://viralpatel.net/blogs/spring-mvc-interceptor-example/

  3. ==============================

    3.가능한 매핑이 누락되었습니다.

    가능한 매핑이 누락되었습니다.

    registry.addInterceptor(getControllerInterceptor()).addPathPatterns("/**");
    

    그리고 내가 아는 한 당신은 사용하지 않아도됩니다.

    super.addInterceptors(registry);
    
  4. from https://stackoverflow.com/questions/35232597/how-to-intercept-all-requests-in-spring-rest-controllers by cc-by-sa and MIT license