需求概述
yaml
spring:
mvc:
static-path-pattern: /file/download/**
web:
resources:
static-locations: file:D:/files/
- 在 Spring Boot 中,在上述静态资源映射的基础上,实现延迟响应,用于测试请求超时
一、使用拦截器
java
@Component
public class DelayInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 对静态资源请求进行延迟
if (handler instanceof ResourceHttpRequestHandler) {
Thread.sleep(20 * 1000);
}
return true;
}
}
java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private DelayInterceptor delayInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 配置拦截器
registry.addInterceptor(delayInterceptor)
.addPathPatterns("/file/download/**");
}
}
二、使用过滤器
java
@Component
@Order(1)
public class DelayFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
String path = httpRequest.getRequestURI();
if (path.startsWith("/file/download/")) {
try {
Thread.sleep(20 * 1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
}
三、使用 ResourceResolver
java
public class DelayResourceResolver extends PathResourceResolver {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
// 对静态资源请求进行延迟
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return super.getResource(resourcePath, location);
}
}
java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置 ResourceResolver
registry.addResourceHandler("/file/download/**")
.addResourceLocations("file:D:/files/")
.resourceChain(true)
.addResolver(new DelayResourceResolver());
}
}
- 注:有了上述 WebConfig 配置类,就不需要在
application.yaml
配置文件中配置相关的静态资源映射了