handlerinterceptor spring-排除管理端口上的请求

tkqqtvp1  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(271)

我希望我的handlerinterceptor,在我的spring引导应用程序中,不要在管理端口上的请求上运行。

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

这很容易失去同步。
有没有更本土化的方式来实现呢(某种Spring配置)

fiei3ece

fiei3ece1#

我选择 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);
        }
    }
}
sy5wg1nm

sy5wg1nm2#

一旦对management.port的所有访问都是以/actuator开头的url请求,spring将不会对请求运行过滤器和拦截器。
所以,这似乎是解决问题的方法

相关问题