class AbstractStrategyInterceptor {
    private static final Logger LOG = LoggerFactory.getLogger(AbstractStrategyInterceptor.class);

    @Autowired
    protected PluginAdapter pluginAdapter;

    @Autowired
    protected StrategyContextHolder strategyContextHolder;

    @Autowired
    protected StrategyHeaderContext strategyHeaderContext;

    @Value("${" + StrategyConstant.SPRING_APPLICATION_STRATEGY_REST_INTERCEPT_DEBUG_ENABLED + ":false}")
    protected Boolean interceptDebugEnabled;

    protected List<String> requestHeaderNameList;

    @PostConstruct
    public void initialize() {
        requestHeaderNameList = strategyHeaderContext.getRequestHeaderNameList();

        InterceptorType interceptorType = getInterceptorType();

        LOG.info("--------- Strategy Intercept Information ---------");
        LOG.info("{} desires to intercept customer headers are {}", interceptorType, requestHeaderNameList);
        LOG.info("--------------------------------------------------");
    }

    protected void interceptInputHeader() {<FILL_FUNCTION_BODY>}

    protected boolean isHeaderContains(String headerName) {
        return headerName.startsWith(DiscoveryConstant.N_D_PREFIX) || requestHeaderNameList.contains(headerName);
    }

    protected boolean isHeaderContainsExcludeInner(String headerName) {
        return isHeaderContains(headerName) && !StrategyUtil.isInnerHeaderContains(headerName);

        // return isHeaderContains(headerName) && !headerName.startsWith(DiscoveryConstant.N_D_SERVICE_PREFIX);
    }

    protected abstract InterceptorType getInterceptorType();

    protected abstract Logger getInterceptorLogger();
}

        if (!interceptDebugEnabled) {
            return;
        }

        Enumeration<String> headerNames = strategyContextHolder.getHeaderNames();
        if (headerNames != null) {
            InterceptorType interceptorType = getInterceptorType();
            Logger log = getInterceptorLogger();
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("\n");
            switch (interceptorType) {
                case FEIGN:
                    stringBuilder.append("--------- Feign Intercept Input Header Information ---------").append("\n");
                    break;
                case REST_TEMPLATE:
                    stringBuilder.append("----- RestTemplate Intercept Input Header Information ------").append("\n");
                    break;
                case WEB_CLIENT:
                    stringBuilder.append("------- WebClient Intercept Input Header Information -------").append("\n");
                    break;
            }
            while (headerNames.hasMoreElements()) {
                String headerName = headerNames.nextElement();
                boolean isHeaderContains = isHeaderContains(headerName.toLowerCase());
                if (isHeaderContains) {
                    String headerValue = strategyContextHolder.getHeader(headerName);

                    stringBuilder.append(headerName + "=" + headerValue).append("\n");
                }
            }
            stringBuilder.append("------------------------------------------------------------");
            log.info(stringBuilder.toString());
        }
    
<no_super_class>