java - 如何将 HandlerInterceptor 应用于 Spring Boot Actuator 端点?

标签 java spring spring-mvc spring-boot

我正在使用 Java 8Spring 1.2.3 构建一个在 Tomcat 7 容器内运行的应用程序。

我确实使用一个非常简单的 HandlerInterceptor 来拦截对我的 Web 应用程序的每个调用,它记录了创建响应所需的总时间以及每个请求的返回代码。

我通过简单地添加 spring-boot-starter-actuator 依赖项来激活执行器端点,并通过调用添加拦截器

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Application application;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(application.executeTimeInterceptor());
    }

}

显然,Spring Boot Actuator 管理的所有端点(/info/health 等)都不会被拦截:我如何确保拦截器拦截对我的应用程序进行的所有调用,包括调用执行器提供的端点的调用?

最佳答案

在 Spring Boot 1.x 中,您可以使用 EndpointHandlerMappingCustomizer 来配置 Actuator 端点的拦截器。例如:

@Bean
public EndpointHandlerMappingCustomizer mappingCustomizer() {
    return new EndpointHandlerMappingCustomizer() {

        @Override
        public void customize(EndpointHandlerMapping mapping) {
            mapping.setInterceptors(new Object[] { application.executeTimeInterceptor() });
        }

    };
}

关于java - 如何将 HandlerInterceptor 应用于 Spring Boot Actuator 端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839350/

相关文章:

javascript - Spring Boot Ajax 动态填充选择选项

java - Spring内存使用率过高

java - WebSocket 握手 - 意外的响应代码 200 - AngularJs 和 Spring Boot

java - 我无法使用 spring mvc 和 jsp 访问我的 web 应用程序中的 js 和 css 资源

java - 获取值的正确方法?

java - "Spring transaction"和 "Hibernate transaction"有什么区别

java - 如何在 spring mvc 和 hibernate 中使用 ehcache

spring - 从非 Controller 位置在 Spring MVC 中添加全局错误

java - Spring缓存与reflect方法

java - 我如何最小化我的应用程序,打开 safari mobile 并在我最后一次使用它时重新打开我的应用程序