Spring 3 Interceptor Order

thr*_*eez 8 spring spring-mvc interceptor

我有一个实现两个拦截器的Spring 3 Web App.我使用注释@Configuration的配置类.代码如下:

    @Override
public void addInterceptors(InterceptorRegistry registry) {
    // TODO Auto-generated method stub
    super.addInterceptors(registry);
    registry.addInterceptor(homeInterceptor()).addPathPatterns("/");
    registry.addInterceptor(allInterceptor());
}
Run Code Online (Sandbox Code Playgroud)

无论我将拦截器添加到注册表的顺序是什么,allInterceptor的preHandle函数总是在homeInterceptor的preHandle之前调用.有谁知道如何控制拦截器被调用的顺序?

谢谢!

Bij*_*men 7

我查看了底层实现,全局拦截器(与任何路径映射无关)在映射的拦截器之前执行(具有相关的路径模式).因此,如果您希望在homeInterceptor之前执行allInterceptor,则allInterceptor可能必须使其成为映射拦截器(通过提供路径模式).

这两个方法记录拦截器并在运行时查找拦截器: org.springframework.web.servlet.handler.AbstractHandlerMapping.initInterceptors()

org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandlerExecutionChain(Object, HttpServletRequest)