簡體   English   中英

HandlerInterceptor spring - 排除管理端口上的請求

[英]HandlerInterceptor spring - exclude requests on management port

我希望我的 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);
}

這很容易不同步。

有沒有更本地的方法來實現它? (某種彈簧配置)

我選擇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);
        }
    }
}

一旦對 management.port 的所有訪問都是對以 /actuator 開頭的 URL 的請求 - spring 將不會對請求運行過濾器和攔截器。

所以,這似乎是關於它的 go 的方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM