Matrix parameters break actuator health paths and ALL_REMAINING selectors with Spring MVC in 4.2.0-M2
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- java, spring-boot
Direzione di ricerca
Inizia da AbstractWebMvcEndpointHandlerMapping.getRemainingPathSegments, dove l’issue identifica l’estrazione del percorso come origine della regressione. Riproduci le richieste health e degli endpoint personalizzati elencate, poi aggiungi un test di regressione per i parametri di matrice e verifica che i percorsi aggiuntivi composti da più segmenti di #51470 continuino a funzionare. Il lavoro è completato quando i selettori di Spring MVC ricevono segmenti di percorso senza parametri di matrice e le richieste elencate restituiscono i risultati previsti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Spring Boot: 4.2.0-M2 (works in 4.1.1)
With Spring MVC, path parameters (for example a ;jsessionid=... added by URL rewriting) are no longer removed from the path segments passed to endpoint operations that use @Selector(match = Match.ALL_REMAINING). This breaks health group and component paths, and changes the values that custom endpoints receive.
With management.endpoint.health.probes.enabled=true, management.endpoint.health.show-components=always and management.endpoint.health.group.custom.include=ping,diskSpace:
| Request | 4.1.1 | 4.2.0-M2 |
|---|---|---|
/actuator/health/liveness;jsessionid=abc |
200 | 404 |
/actuator/health/diskSpace;jsessionid=abc |
200 | 404 |
/actuator/health/custom/ping;x=1 |
200 | 404 |
/actuator/health/custom;x=1/ping |
200 | 500 |
For a custom endpoint:
@Endpoint(id = "echo")
class EchoEndpoint {
@ReadOperation
String echo(@Selector(match = Match.ALL_REMAINING) String... path) {
return String.join("|", path);
}
}
GET /actuator/echo/a/b;jsessionid=abc returns a|b in 4.1.1 and a|b;jsessionid=abc in 4.2.0-M2.
This seems to come from #51470. getRemainingPathSegments in AbstractWebMvcEndpointHandlerMapping now tokenizes pathPattern.extractPathWithinPattern(...).value(), which keeps path parameters, whereas the previous code used PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE.
Using the decoded value of each segment without its parameters restores the 4.1.1 behavior. I verified this locally against all the cases above, and the multi-segment additional paths from #51470 keep working:
PathContainer remainingPath = pathPattern
.extractPathWithinPattern(ServletRequestPathUtils.getParsedRequestPath(request).pathWithinApplication());
return remainingPath.elements()
.stream()
.filter(PathContainer.PathSegment.class::isInstance)
.map((element) -> ((PathContainer.PathSegment) element).valueToMatch())
.filter(StringUtils::hasLength)
.toArray(String[]::new);
I'd be happy to submit a PR with this change and a test.
- Lingua principale
- Java
- Stelle
- 81.7k
- Fork
- 45.1k
- Merge medio
- 3g 13h
- PR unite (30g)
- 58
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di spring-projects/spring-boot
-
X-Forwarded-Prefix can no longer be enabled with the NATIVE strategy on Reactor NettyForse già presa @bclozel l’ha presa 1 giorno fa. Apertastatus: waiting-for-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
spring-projects/spring-boot#52316 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
Maven process-test-aot only copies META-INF/native-image of the generated resources so the Logback configuration is lost in native testsForse già presa @ZedingZhang l’ha presa 2 giorni fa. Apertastatus: waiting-for-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
spring-projects/spring-boot#52301 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
status: waiting-for-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
spring-projects/spring-boot#52296 ·
I maintainer di solito rispondono entro 2 giorni
-
status: waiting-for-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
spring-projects/spring-boot#52295 ·
I maintainer di solito rispondono entro 2 giorni
-
Prevent upgrade to Commons Codec 1.23.0Forse già presa @snicoll l’ha presa 3 giorni fa. Apertastatus: team-only type: task
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
spring-projects/spring-boot#52143 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di spring-projects/spring-boot
Issue simili
-
dev/release: verify-release-candidate.sh runs 0 Java tests with Debian's MavenForse già presa @kou l’ha presa oggi. ApertaType: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/arrow-adbc#4947 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
lysine-dev/okhttp#9814 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
checkstyle/checkstyle#22153 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno