spring 3拦截器顺序
问题内容:
我有一个实现两个拦截器的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());
}
无论我将拦截器添加到注册表的顺序如何,始终在homeInterceptor的preHandle之前调用allInterceptor的preHandle函数。有谁知道如何控制拦截器的调用顺序?
谢谢!
问题答案:
我看了下实现,全局拦截器(不与任何路径映射关联)在映射的拦截器(具有关联的路径模式)之前执行。因此,如果您要在homeInterceptor
之前执行allInterceptor
,则allInterceptor
可能必须将其设为映射的拦截器(通过提供路径模式)。
这是两种记录拦截器并在运行时查找拦截器的方法:
org.springframework.web.servlet.handler.AbstractHandlerMapping.initInterceptors()
org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandlerExecutionChain(Object, HttpServletRequest)