我如何为特定请求使用多个拦截器,例如 POST、Get 和 PUT?

How can i use multiple interceptors for specific request such as POST, Get and PUT?

我在项目中使用 spring 引导和云。对于日志记录,我使用拦截器。由于我是拦截器的新手,所以我很难使用多个拦截器。比如我可以为特定任务使用特定的拦截器吗?例如,当我请求 post 时,会调用 POST 拦截器,当我使用 GET 时,会调用 get 拦截器。以及如何为多个拦截器编写代码?

我还没有尝试过任何东西,因为我不明白逻辑

你可以定义所有你想要的HTTP拦截器,每个拦截器都应该实现拦截HTTP请求的逻辑。

@Slf4j
@Component
public class GetRequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (request.getMethod().equals(HttpMethod.GET.name())) {
            log.info("intercepting GET request {}", request.getRequestURI());

        }

        return true;
    }
}


@Slf4j
@Component
public class PostRequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (request.getMethod().equals(HttpMethod.POST.name())) {
            log.info("intercepting POST request {}", request.getRequestURI());
        }

        return true;
    }
}

然后你必须在 spring 中注册它们。

@RequiredArgsConstructor
@Configuration
public class WebConfigurer implements WebMvcConfigurer {

    private final GetRequestInterceptor getInterceptor;
    private final PostRequestInterceptor postRequestInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getInterceptor);
        registry.addInterceptor(postRequestInterceptor);
    }

}

@earandap

您的评论有效非常感谢。 这是我的代码:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {

    long startTime = System.currentTimeMillis();

    request.setAttribute("startTime", startTime);

    log.info("[START]  [" + request.getMethod() + "] [ URL is: " + request.getRequestURL().toString()
            + " Body is: {}]");

    return true;

}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {

    long startTime = (long) request.getAttribute("startTime");
    request.removeAttribute("startTime");
    long endTime = System.currentTimeMillis();
    log.info("[END]  [" + request.getMethod() + "]   [ URL is:" + request.getRequestURL().toString()
            + "]  [Execution Time: {} miliseconds]", (endTime - startTime));
}