【问题标题】:Spring 3 <mvc:interceptors> flawed?Spring 3 <mvc:interceptors> 有缺陷吗?
【发布时间】:2011-09-21 20:07:59
【问题描述】:

我有一个 Spring 2.5.x 应用程序,我正在迁移到 Spring 3,但遇到了一个小问题。

我有一个像这样的处理程序映射:

<bean id="handlerMappings1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="interceptor1" />
            <ref bean="interceptor2" />
            ....
            <ref bean="interceptorN" />
        </list>
    </property>
    <property name="urlMap">
        <map>
            <entry key="/url1.html" value-ref="controller1" />
            <entry key="/url2.html" value-ref="controller2" />
            ....
            <entry key="/url100.html" value-ref="controller100" />
        </map>
    </property>
</bean>

还有一个这样的:

   <bean id="handlerMappings2" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <entry key="/urlA.html" value-ref="controllerA" />
                <entry key="/urlB.html" value-ref="controllerB" />
                ....
                <entry key="/urlN.html" value-ref="controllerN" />
            </map>
        </property>
    </bean>

我正在慢慢地用&lt;context:component-scan&gt; 替换@RequestMapping 注释(它基本上注册了DefaultAnnotationHandlerMapping)。

在 Spring 3 中,我看到了 &lt;mvc:interceptors&gt; 标签,它可用于向某些 URL 添加拦截器,但您只能指定一个拦截器,至少我看到的是 from the schema

据我所知,我必须为每个拦截器注册其中一个,这将复制我所有的 URL 的次数与我拥有的拦截器一样多(我什至不知道它们将以什么顺序运行)。

另一方面,我无法在 DefaultAnnotationHandlerMapping 上添加迭代器,因为它们将为我所有带有 @RequestMapping 注释的控制器运行,而我不希望这样。

那么我怎样才能为某些 URL 指定拦截器是 Spring 3,而不重复 URL 和 根据@RequestMapping注解保持URL到控制器的映射?

【问题讨论】:

    标签: java spring model-view-controller controller spring-3


    【解决方案1】:

    您可以查看springplugins 项目中的SelectedAnnotationHandlerMappingIgnoreSelectedAnnotationHandlerMapping 类。消息来源已有多年历史,但这个想法仍然存在。

    这里有一个关于创作者博客的演示文稿:Spring Framework Annotation-based Controller Interceptor Configuration。确保您还阅读了博客文章中的 cmets。

    【讨论】:

      【解决方案2】:

      一种选择是创建一个自定义拦截器,它可以委托给一组注入的拦截器。

      【讨论】:

        猜你喜欢
        • 2012-12-30
        • 2020-06-06
        • 2011-01-16
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        相关资源
        最近更新 更多