繁体   English   中英

springboot java 拦截器不调用 TRACE 命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM