SpringBoot 2.x 版本处理拦截器导致的静态资源被拦截问题

过滤静态资源

springboot1.x和2.x拦截器中静态资源访问的区别

  • 1.x的 resources/static 目录下的静态资源可以直接访问,当有配置自定义 HandlerInterceptor 拦截器时,请求静态资源路径不会被拦截 。
  • 2.x的如果自定义 HandlerInterceptor 拦截器时访问静态资源就会被同步拦截,导致页面中访问这些静态资源出现 404。

解决方案

以下是 SpringBoot 2.x 以上的版本,1.x 的会自动处理。

第一种,不要过滤全部请求,也就是不要直接填写 /**

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginInterceptor())
        .addPathPatterns("/main","/admin/**");
}

不过,这种方式比较繁琐,整个网站有很多链接都需要手动一一拦截,好处就是静态资源不会被拦截,仅此而已。

第二种,将静态资源放在同一目录下,然后排除该目录;

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginInterceptor())
        .addPathPatterns("/**")
        .excludePathPatterns("/static/**","/webjars/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}

这种方式,所有请求都会被拦截,除了排除过滤的链接之外。缺点,SpringBoot 对静态资源的默认配置也会被拦截。

webjars 是依赖方式的目录,所以这个可以一同排除。

后面的代码一定要添加,否则 SpringBoot 默认自动配置会对 static 目录进行处理。添加了后面的代码映射之后,就无需在配置文件中配置:spring.mvc.static-path-pattern

更新时间:2020-05-24 19:37:06

本文由 工匠猫 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://huasio.com/archives/spring-boot-interceptor-static-resource-solution
最后更新:2020-05-24 19:37:06

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×