刨根问底:Spring Boot中HandlerInterceptor没有拦截静态资源问题

在Spring Boot中设置了HandlerInterceptor,发现对于js、css等文件都没有起作用。 定义一个HandlerInterceptor

public class FooInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("foo");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }

}

将HandlerInterceptor匹配到所有路径

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new FooInterceptor())
                .addPathPatterns("/**");

    }

}

这时虽然PathPatterns设置了“/**”,但是发现FooInterceptor对静态资源没有起作用。这时看看addInterceptors方法上的注释。

Add Spring MVC lifecycle interceptors for pre- and post-processing of controller method invocations. Interceptors can be registered to apply to all requests or be limited to a subset of URL patterns. Note that interceptors registered here only apply to controllers and not to resource handler requests. To intercept requests for static resources either declare a MappedInterceptor bean or switch to advanced configuration mode by extending WebMvcConfigurationSupport and then override resourceHandlerMapping.

说明它只对controller起作用,如果想对静态资源起作用,简单的方法是添加一个MappedInterceptor bean。

@Configuration
public class WebConfig {

    @Bean
    public MappedInterceptor getMappedInterceptor() {
        return new MappedInterceptor(new String[] { "/**" }, new FooInterceptor());
    }
}

参考代码见https://github.com/kabike/spring-boot-demo

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏世界第一语言是java

java根据ip地址获取城市地域信息

2545
来自专栏名山丶深处

springaop——AspectJ不可不知的细节

1377
来自专栏函数式编程语言及工具

Akka(26): Stream:异常处理-Exception handling

   akka-stream是基于Actor模式的,所以也继承了Actor模式的“坚韧性(resilient)”特点,在任何异常情况下都有某种整体统一的异常处理...

2818
来自专栏大数据学习笔记

Hadoop源码分析:FileSystem类

1、org.apache.hadoop.conf包 org.apache.hadoop.conf包位于hadoop-common模块下 ? 1.1 Con...

4147
来自专栏小白鼠

SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security

只有特定名称或者类型的Bean(通过@ConditionalOnMissingBean修饰)不存在于BeanFactory中时才创建某个Bean

2173
来自专栏JavaEdge

遨游springmvc之HandlerExceptionResolver1.前言2.原理4.总结

4275
来自专栏IT笔记

Grafana+Prometheus系统监控之SpringBoot

前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prome...

1.2K6
来自专栏颇忒脱的技术博客

Spring、Spring Boot和TestNG测试指南 - 测试@Configuration

在Spring引入Java Config机制之后,我们会越来越多的使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机...

802
来自专栏扎心了老铁

使用HDFS客户端java api读取hadoop集群上的信息

本文介绍使用hdfs java api的配置方法。 1、先解决依赖,pom <dependency> <groupId>org.apac...

1.1K7
来自专栏osc同步分享

@Scheduled 注解的使用

1.启用定时任务(@EnableScheduling) package com.example.demo; import org.springframewor...

3539

扫码关注云+社区