【问题标题】:HandlerInterceptor spring - exclude requests on management portHandlerInterceptor spring - 排除管理端口上的请求
【发布时间】:2021-02-04 20:42:02
【问题描述】:

我希望我的 HandlerInterceptor 在我的 Spring Boot 应用程序中不运行管理端口上的请求。

management.port = 9091

我可以想到两种方法,但我正在寻找一种更标准的方法。

一个是从 HandlerInterceptor 中检查端口:

    @Override
    public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) {
        if(request.getLocalPort() == managementPort){
           return true;
        }
        else{
             ....
        }
}

第二个是在注册拦截器时排除所有与managementPort相关的路径:

@Override
public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).excludePathPatterns(managementPortEndpoints);
}

这很容易不同步。

有没有更原生的方法来实现它? (某种弹簧配置)

【问题讨论】:

    标签: java spring spring-boot interceptor handlerinterceptor


    【解决方案1】:

    我选择javax.servlet.Filter 来过滤请求。

    import org.springframework.stereotype.Component;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @Component
    public class BlockFilter implements Filter {
        private int managementPort = 9091;
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            if (request.getRemotePort() == managementPort) {
                chain.doFilter(request, response);
            } else {
                ((HttpServletResponse) response).setStatus(401);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      一旦对 management.port 的所有访问都是对以 /actuator 开头的 URL 的请求 - spring 将不会对请求运行过滤器和拦截器。

      所以,这似乎是解决问题的方法

      【讨论】:

        猜你喜欢
        • 2021-01-12
        • 1970-01-01
        • 2021-08-09
        • 2015-09-17
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        相关资源
        最近更新 更多