首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring 3拦截器订单

Spring 3拦截器订单
EN

Stack Overflow用户
提问于 2012-07-21 04:49:11
回答 2查看 11.6K关注 0票数 8

我有一个Spring3Web App,它实现了两个拦截器。我正在使用一个注解为@Configuration的配置类。代码如下:

代码语言:javascript
运行
复制
    @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之前被调用。有人知道如何控制拦截器的调用顺序吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)

票数 7
EN

Stack Overflow用户

发布于 2016-02-19 22:01:24

似乎在Spring3中,他们已经移除了首先执行全局拦截器的逻辑。现在,拦截器按照声明的顺序执行。

但是请注意,拦截器的postHandle是以相反的顺序执行的!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11586757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档