如何针对特定请求(例如 POST、Get 和 PUT)使用多个拦截器?

its*_*man 0 spring spring-mvc request interceptor spring-boot

我在项目中使用了spring boot和cloud。对于日志记录,我使用拦截器。由于我是拦截器的新手,因此我在使用多个拦截器时遇到困难。就像我可以使用特定的拦截器来执行特定任务吗?例如,当我请求帖子时,会调用 POST 拦截器,当我使用 GET 时,会调用 get 拦截器。我怎样才能为多个拦截器编写代码?

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

ear*_*dap 6

你可以定义所有你想要的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你必须在春天注册它们。

@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);
    }

}
Run Code Online (Sandbox Code Playgroud)