大数据、Java EE 学习资料请关注 B 站:https://space.bilibili.com/204792350

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

# Java   SpringBoot  

评论

Your browser is out-of-date!

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

×