복붙노트

[SPRING] 스프링 mvc 3.0으로 핸들러 인터셉터를 등록하는 방법은 무엇입니까?

SPRING

스프링 mvc 3.0으로 핸들러 인터셉터를 등록하는 방법은 무엇입니까?

그것은 쉬워야한다 :

<bean id="handlerMapping"
   class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="myInterceptor" />
        </list>
    </property>
</bean>

하지만이 방법은 인터셉터가 호출되지 않습니다.

해결법

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

    1.기본적으로 Spring은 명시적인 설정이 필요없이 BeanNameUrlHandlerMapping과 DefaultAnnotationHandlerMapping을 등록합니다.

    기본적으로 Spring은 명시적인 설정이 필요없이 BeanNameUrlHandlerMapping과 DefaultAnnotationHandlerMapping을 등록합니다.

    자신 만의 HandlerMapping Bean을 정의하면 기본 Bean이 등록되지 않고 명시 적으로 선언 된 bean을 얻게됩니다.

    여태까지는 그런대로 잘됐다.

    을 믹스에 추가하면 문제가 발생합니다. 또한 기본값을 대체하는 고유 한 DefaultAnnotationHandlerMapping을 선언합니다. 그러나, 또한 자신의 선언을하면, 결국 두 가지로 끝납니다. 그들은 선언 순서에 따라 논의되기 때문에 일반적으로 에 의해 등록 된 객체가 먼저 호출되고 자신의 객체는 무시됩니다.

    에 의해 등록 된 DefaultAnnotationHandlerMapping이 기본 것과 같이 동작하는 경우, 즉 명시 적으로 선언 된 것들이 우선 순위가 높았던 경우와 같이 좋았지 만, 작성한 방식과 다릅니다.

    나의 현재 환경 설정은 를 전혀 사용하지 않는 것이고, 너무 혼란스럽고 다른 설정 옵션과 혼합 할 때 너무 예측할 수 없다. 특별히 복잡한 작업을 실제로 수행하지는 않으며, 명시 적으로 추가 작업을 수행하는 것이 어렵거나 어렵지 않습니다. 최종 결과는 더 쉽게 따라 할 수 있습니다.

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

    2.문제 : Spring MVC 태그가 DefaultAnnotationHandlerMapping의 사용자 지정 정의와 잘 어울리지 않습니다.

    문제 : Spring MVC 태그가 DefaultAnnotationHandlerMapping의 사용자 지정 정의와 잘 어울리지 않습니다.

    왜..? 그 이유는 위의 해답에서 잘 설명되어 있습니다.

    내가 DefaultAnnotationHandlerMapping을 사용하고 싶었던 이유

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

    3.이 동작의 이유는 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 유형의 두 Bean이 응용 프로그램 컨텍스트에 존재하기 때문입니다. Spring은이 두 가지를 해결하지만, 처음에는 인터셉터를 요청합니다. 이 문제를 해결하려면 다음 init 매개 변수를 DispatcherServlet으로 설정해야합니다.

    이 동작의 이유는 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 유형의 두 Bean이 응용 프로그램 컨텍스트에 존재하기 때문입니다. Spring은이 두 가지를 해결하지만, 처음에는 인터셉터를 요청합니다. 이 문제를 해결하려면 다음 init 매개 변수를 DispatcherServlet으로 설정해야합니다.

    <init-param>
        <param-name>detectAllHandlerMappings</param-name>
        <param-value>false</param-value>
    </init-param>
    

    이렇게하면 디스패처 서블릿은 x-servlet.xml에 정의 된 handlerMapping 만 사용합니다.

    이것이 왜 기본 동작인지는 저 밖에 있습니다. 나는 봄 공동체로부터의 대답을 기대하고있다.

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

    4.내 경우에는 annotation을 사용하여 json 지원을 위해 jackson을 사용할 때 을 제거 할 수 없습니다.

    내 경우에는 annotation을 사용하여 json 지원을 위해 jackson을 사용할 때 을 제거 할 수 없습니다.

    내가 시도한, 나의 모든 인터셉터 를 별도의 "xml"파일 (interceptor-config.xml)로 옮기고 그것을 x-dispatcher-servlet.xml에서 가져 왔습니다.

    <import resource="interceptor-config.xml"/>
    

    그것은 내 문제를 해결하고 기본 'DefaultAnnotationHandlerMapping'콩 내 응용 프로그램 컨텍스트를 피하십시오.

    별도의 'xml'을 생성하는 대신 인터셉터 내용을 'x-dispatcher-servlet.xml'에 직접 복사 / 붙여 넣기 할 수 있습니다.

    다음은 나의 인터셉터이다.

      <mvc:interceptors> 
             <mvc:interceptor>
                 <!-- Intercepting specific URL -->
                 <mvc:mapping path="/abc/**" />
                 <bean id= "myInterceptor" 
                     class="xx.xxx.xxx.MyInterceptor" />
             </mvc:interceptor>
    <mvc:interceptors>
    
  5. ==============================

    5.Spring MVC 3.0에서는 핸들러 매핑을 수동으로 정의하는 대신 를 사용할 수 있습니다.

    Spring MVC 3.0에서는 핸들러 매핑을 수동으로 정의하는 대신 를 사용할 수 있습니다.

  6. from https://stackoverflow.com/questions/3230633/how-to-register-handler-interceptors-with-spring-mvc-3-0 by cc-by-sa and MIT license