[英]springboot java interceptor doesn't invoke TRACE commad
我在spring-boot中定义了一个拦截器。我重写了preHandle
方法。 拦截器正在调用所有 HTTP 命令:GET/PUT/POST/PATCH/DELETE/HEAD/OPTIONS 但它不会调用 TRACE 命令。
我想念什么?
拦截器:
@Component
public class BlockingHttpInterceptor implements HandlerInterceptor {
private final Class<?> thisClass = this.getClass();
private String BASE_URL = "/subscribers";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (HttpMethod.GET.matches(request.getMethod())
|| HttpMethod.POST.matches(request.getMethod())
|| (HttpMethod.DELETE.matches(request.getMethod()) && request.getRequestURI().startsWith(BASE_URL))
|| HttpMethod.PATCH.matches(request.getMethod())) {
return true;
} else {
response.sendError(HttpStatus.METHOD_NOT_ALLOWED.value());
return false;
}
}
}
拦截器配置:
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private BlockingHttpInterceptor blockingHttpInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(blockingHttpInterceptor).addPathPatterns("/**");
}
}
正如在DispatcherServlet
的 JavaDoc 中所解释的,TRACE 请求在默认情况下不会被调度,因此它们永远不会到达您的控制器/拦截器。
幸运的是,您使用的是 Spring Boot,这使得通过spring.mvc.dispatch-trace-request
属性(默认情况下为false
)进行配置非常容易。 在您的application.properties
中将此设置为true
将启用对 TRACE 请求的调度。
spring.mvc.dispatch-trace-request=true
将以上内容添加到您的属性将启用它,并使事情如您所愿。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.