@Override
    public Map<String, List<String>> getRequestTag(String path, String methodName, Map<String, List<String>> headers,
            Map<String, String[]> parameters, Keys keys) {
        Set<String> injectTags = keys.getInjectTags();
        if (CollectionUtils.isEmpty(injectTags)) {
            // The staining mark is empty, which means that there are no staining rules, and it is returned directly
            LOGGER.fine("Lane tags are empty.");
            return Collections.emptyMap();
        }

        // Markers for upstream transparent transmissions
        Map<String, List<String>> tags = getRequestTag(headers, injectTags);

        // This staining marker
        Map<String, List<String>> laneTag = laneService.getLaneByParameterArray(path, methodName, headers, parameters);
        if (CollectionUtils.isEmpty(laneTag)) {
            LOGGER.fine("Lane is empty.");
            return tags;
        }

        // If there is a marker in the upstream transmission that is the same as the one in this staining,
        // the upstream transmission shall prevail
        laneTag.forEach(tags::putIfAbsent);
        if (LOGGER.isLoggable(Level.FINE)) {
            LOGGER.fine("Lane is " + tags);
        }
        return tags;
    }
@Test
    public void testGetRequestTag() {
        // Test matchTags as null
        Map<String, List<String>> requestTag = handler.getRequestTag("", "", null, null, new Keys(null, null));
        Assert.assertEquals(requestTag, Collections.emptyMap());

        // Test getLane returns null
        laneService.setReturnEmpty(true);
        Map<String, List<String>> headers = new HashMap<>();
        headers.put("bar", Collections.singletonList("bar1"));
        headers.put("foo", Collections.singletonList("foo1"));
        Set<String> matchTags = new HashSet<>();
        matchTags.add("bar");
        matchTags.add("foo");
        requestTag = handler.getRequestTag("", "", headers, null, new Keys(null, matchTags));
        Assert.assertEquals(2, requestTag.size());
        Assert.assertEquals("bar1", requestTag.get("bar").get(0));
        Assert.assertEquals("foo1", requestTag.get("foo").get(0));

        // Test getLane is not empty
        laneService.setReturnEmpty(false);
        requestTag = handler.getRequestTag("", "", headers, null, new Keys(null, matchTags));
        Assert.assertEquals(3, requestTag.size());
        Assert.assertEquals("bar1", requestTag.get("bar").get(0));
        Assert.assertEquals("foo1", requestTag.get("foo").get(0));
        Assert.assertEquals("flag1", requestTag.get("sermant-flag").get(0));
    }