복붙노트

[SPRING] 스프링 MVC 인터셉터 매핑 문제

SPRING

스프링 MVC 인터셉터 매핑 문제

나는이 XML 세그먼트를 가지고있다.

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/statics/**" />
        <bean class="com.company.website.servlet.StaticsHandlerInterceptor" />
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/data/**" />
        <bean class="com.company.website.servlet.AJAXHandlerInterceptor" />
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.company.website.servlet.PageHandlerInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

StaticsHandlerInterceptor는 true (모든 정적 컨텐츠 (js, css, 등))를 반환하는 preHandle 메소드 일 뿐이지 만, 이유는 세 가지 인터셉터가 있습니다. 두 번째는 AJAX 요청입니다. 세 번째 페이지는 실제 페이지입니다. 내가보기에는 정적과 AJAX 인터셉터가 있어야만 호출됩니다. 그러나, 그들과 함께, 페이지 인터셉터는 항상 호출되고 있습니다. 페이지 인터셉터 만 페이지를 호출하도록합니다. 어떻게해야합니까?

해결법

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

    1.페이지에 대해 일관된 이름 지정 체계를 사용한다고 가정합니다. 외부에서 볼 수있는 페이지 URL이 .html로 끝나는 경우 다음을 지정하십시오.

    페이지에 대해 일관된 이름 지정 체계를 사용한다고 가정합니다. 외부에서 볼 수있는 페이지 URL이 .html로 끝나는 경우 다음을 지정하십시오.

    <mvc:mapping path="/**/*.html" />
    

    그런 "확장"을 가지고있는 것은 매우 RESTful하지 않습니다. 다음과 같은 스키마를 사용하는 것을 선호 할 수 있습니다.

    그렇다면 다음과 같이 멋진 읽을 수있는 의미 매핑을 사용할 수 있습니다.

    <mvc:mapping path="/**/page/**" />
    

    이는 URL 구조의 "깊이"에 영향을 미칩니다.

    편집 : OK 그래서 그것은 mvc : interceptors 스타일의 bean 선언을 사용하는 것이 include가 아닌 pattern으로 제외를 지정하는 데 필요한 표현력을 제공하지 못하는 것 같습니다.

    이 블로그에서 내가 할 수있는 것부터 좀더 자세한 HandlerMapping 접근법을 사용하면 일치 논리를 뒤집을 수 있습니다 - 필요한 것을 얻기 위해 일치하지 않는 것을 지정할 수 있습니다 :

    <bean id="nonStaticNonDataMapper" class="org.springplugins.web.IgnoreSelectedAnnotationHandlerMapping">
    <property name="order">
        <value>0</value>
    </property>
    <property name="urls">
        <list>
            <value>/statics/**</value>
            <value>/data/**</value>
        </list>
    </property>
    <property name="interceptors">
        <list>
            <bean class="com.company.website.servlet.PageHandlerInterceptor" />
        </list>
    </property>
    

    (위의 스 니펫을 포맷팅 해 주셔서 사과드립니다. Markdown은 / **가 주석이라고 생각합니다 .-)

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

    2.mvc : 인터셉터는 이제 특정 매핑을 제외시킬 수 있습니다. 현재 스프링 3.2.0.M2에서만 사용 가능합니다. JIRA 항목 (지금 해결됨)에서 자세한 정보를 찾을 수 있습니다 : https://jira.springsource.org/browse/SPR-6570

    mvc : 인터셉터는 이제 특정 매핑을 제외시킬 수 있습니다. 현재 스프링 3.2.0.M2에서만 사용 가능합니다. JIRA 항목 (지금 해결됨)에서 자세한 정보를 찾을 수 있습니다 : https://jira.springsource.org/browse/SPR-6570

  3. from https://stackoverflow.com/questions/8044277/spring-mvc-interceptor-mapping-problems by cc-by-sa and MIT license