天天看點

SpringBoot靜态資源請求失敗,添加攔截器,指定字尾 解決方法

SpringBoot靜态資源請求失敗

靜态資源存放位置為: /resources/static/**

方法一:

1.在pom中添加jar包

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
           

2.application.yml檔案中添加配置

spring:
    mvc:
        static-path-pattern: /static/**
           

如需添加配置類, 不能繼承WebMvcConfigurationSupport, 應實作WebMvcConfigurer類或自定義配置類, 否則由于WebMvcConfigurationSupport中的addResourceHandlers預設方法會導緻靜态資源不可通路

方法二:

在配置類中添加urlMapper

@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {  
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }

}
           

這兩種方法都不能再添加配置類, 指定url請求字尾了, 如果需要指定請求字尾, 可增加Controller基類, 其他Controller繼承該類

@RequestMapping("**.html") // 隻處理.html字尾的請求
public class BaseController {
}
           
@Controller
public class IndexController extends BaseController {
}
           

添加攔截器

1.配置類中注冊攔截器

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalInterceptor()).addPathPatterns("/**/*.html");
    }
}
           

2.添加攔截器類

public class GlobalInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(
            HttpServletRequest request, 
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("---------------request start--------------");
        return true;
    }

}