当前位置: 首页 > 知识库问答 >
问题:

Spring MVC-拦截器从未调用

夏骞尧
2023-03-14

我试图在我的应用程序中配置拦截器,但我无法使其工作。

在我的应用程序配置类中,我以以下方式进行了配置:

@Configuration
@EnableWebMvc
public class AppContextConfiguration extends WebMvcConfigurerAdapter {
    ...
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor());
    }
    ...
}

拦截器:

public class MyInterceptor extends HandlerInterceptorAdapter{

    private static final Logger logger = LoggerFactory.getLogger(MyInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
        Object handler) throws Exception {

        logger.debug("MyInterceptor - PREHANDLE");
    }
}

有人知道为什么没有被调用吗?

共有3个答案

慕容昊焜
2023-03-14

有人能把Theos的答案标记为正确的吗?我遇到了一个使用国际化和Thymeleaf(带有布局拦截器)完美运行的Spring Boot应用程序的情况,只要该应用程序运行localhost以下配置:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
    registry.addInterceptor(thymeleafLayoutInterceptor());
}

当我将应用程序部署到Elasticbeanstalk实例时,两个拦截器都不再启动。虽然添加了一次。当我将设置更改为

@Bean
public MappedInterceptor localeInterceptor() {
    return new MappedInterceptor(null, localeChangeInterceptor());
}

@Bean
public MappedInterceptor thymeleafInterceptor() {
    return new MappedInterceptor(null, thymeleafLayoutInterceptor());
}

在所有环境下一切都运行良好。添加addInterceptor的拦截器一定有问题,它可能取决于用于调用请求的URL——我不知道。

谢谢你的回答,西奥,我只是想在这里添加这个,如果其他人偶然发现这个不错的功能。

任宾鸿
2023-03-14

拦截器类必须在标记中的Spring上下文xml配置文件中声明

从文档中

注册应用于所有URL路径的侦听器的示例:

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

注册仅限于特定URL路径的侦听器的示例:

<mvc:interceptors>
    <mvc:interceptor>
        <mapping path="/secure/*"/>
        <bean class="org.example.SecurityInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

因此,需要在spring上下文xml文件中配置MyInterceptor

南宫博简
2023-03-14

我正在使用Spring Boot,并且遇到了与调用addInterceptors()来注册拦截器相同的问题,但拦截器从未在请求期间触发。然而XML配置没有问题。

基本上,您不需要WebMVCConfigureAdapter类。您只需要声明一个类型为MappeInterceptor的Bean:

@Bean
public MappedInterceptor myInterceptor()
{
    return new MappedInterceptor(null, new MyInterceptor());
}
 类似资料:
  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 问题内容: 我创建了一个RestEASY拦截器,以允许我在Web服务调用完成后在HTTP响应上设置标头值。我的代码看起来像这样… 但是,当我调用服务时,永远不会调用拦截器。我看到webservice调用成功完成,但是拦截器中的任何代码都没有执行过。除了注册拦截器,我还需要做些其他事情吗?是否必须在其他任何地方声明?是否需要包含任何特殊的web.xml参数? 问题答案: 您必须在web.xml的re

  • 本文向大家介绍详解springmvc拦截器拦截静态资源,包括了详解springmvc拦截器拦截静态资源的使用技巧和注意事项,需要的朋友参考一下 springmvc拦截器interceptors springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。 上代码: 问题来了,在请求jsp页面的时候,你的静态资源的访问仍然会被自定义拦截器

  • 我根据JBoss文档创建了一个拦截器。 为了测试拦截器,我把: 现在,我想使用WeldJUnit4Runner类在单元测试中测试这个拦截器。 现在的预期产出当然是 但结果却是 主要问题是,如果我在测试中注入bean,这也是正确的:我调用的bean的第一个方法被拦截,但是如果这个方法调用另一个方法,拦截器就不会被调用。 任何想法都非常感谢! 我只是按照@adrobisch的建议修改了我的代码,效果如

  • 本文向大家介绍springmvc拦截器登录验证示例,包括了springmvc拦截器登录验证示例的使用技巧和注意事项,需要的朋友参考一下 一开始,学了拦截器与过滤器,咋一看两者有点像,实际上两者有很大的不同。就用拦截器和过滤器分别做了登录验证试验,这次先说拦截器。下面是自己实践的一个实例: 在spring-mvc.xml中配置拦截器: 如上所示,这里配置了LoginIntercepter,为了简单起

  • 我对和的用途有点困惑。 正如我从文档中理解的,拦截器在请求之间运行。另一方面,Filter在呈现视图之前运行,但在Controller呈现响应之后运行。 那么,拦截器中的和过滤器中的之间的区别在哪里呢?