我有一个Spring3Web App,它实现了两个拦截器。我正在使用一个注解为@Configuration的配置类。代码如下:
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
super.addInterceptors(registry);
registry.addInterceptor(homeInterceptor()).addPathPatterns("/");
registry.addInterceptor(allInterceptor());
}
无论我将拦截器添加到注册表的顺序是什么,allInterceptor的preHandle函数总是在homeInterceptor的preHandle之前被调用。有人知道如何控制拦截器的调用顺序吗?
谢谢!
发布于 2012-07-21 11:02:20
我查看了底层实现,全局拦截器(不与任何路径映射关联)在映射拦截器(具有关联的路径模式)之前执行。因此,如果您希望在allInterceptor
之前执行homeInterceptor
,则可能必须使allInterceptor
成为映射拦截器(通过提供路径模式)。
以下是记录拦截器并在运行时查找拦截器的两个方法:org.springframework.web.servlet.handler.AbstractHandlerMapping.initInterceptors()
org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandlerExecutionChain(Object, HttpServletRequest)
发布于 2016-02-19 22:01:24
似乎在Spring3中,他们已经移除了首先执行全局拦截器的逻辑。现在,拦截器按照声明的顺序执行。
但是请注意,拦截器的postHandle是以相反的顺序执行的!
https://stackoverflow.com/questions/11586757
复制相似问题