Quell-MVC-Pfad, der doppelten Schrägstrich ignoriert //

9

In einer Spring Boot-Anwendung habe ich einen Filter mit der URL-Zuordnung /service1/* eingerichtet. Dies wurde mit FilterRegistrationBean gemacht.

Es gibt auch einen Controller, der demselben Muster zugeordnet ist:

%Vor%

Das Problem:

Das Ausführen von POST http://localhost:8080/service1/hello funktioniert wie erwartet (d. h. der Filter ist an der Anforderungsverarbeitungskette beteiligt und der Dienstcontroller wurde aufgerufen). Die Ausführung von http://localhost:8080//service1/hello (beachten Sie den doppelten Schrägstrich) wird jedoch den Filter umgehen, aber trotzdem den Controller erreichen, da Spring MVC einen nachgiebigeren Pfadabgleichalgorithmus hat.

Ich habe gelesen, dass der Controller-Pfad-Matching-Algorithmus angepasst werden kann (Link: Ссылка ), aber ich finde keine Option, doppelte Schrägstriche nicht zu ignorieren.

Auch wichtig: Dieses Verhalten bedeutet, dass jeder durch einen Filter geschützte Controller (nicht die Spring-Sicherheit, sondern jeder benutzerdefinierte Filter) umgangen werden kann, indem Sie einfach einen doppelten Schrägstrich in einen beliebigen Teil der URL einfügen. Ist mein Verständnis richtig? Weißt du, ob der MVC-Controller-Pfadvergleich optimiert werden kann, so dass doppelte Schrägstriche im Pfadabgleichalgorithmus nicht ignoriert werden?

    
Sebastian 08.03.2016, 03:53
quelle

1 Antwort

0

Es gibt keine Hinweise auf Spring MVC-Mapping, und generische Servlet-Filter sollten sich gleich verhalten. Ant-Pattern und Servlet-Mapping sind verschiedene Standards und die Interpretation von // könnte kollabiert / normalisiert werden oder nicht.

Ich würde einfach:

A) Registrieren Sie Ihren Filter für /* und führen Sie den Abgleich im Filter durch.

B) Richten Sie benutzerdefinierte AntPathMatcher ein im Frühling.

C) Registrieren Sie vor Ihrem Filter einen Filter, der den URL-Pfad normalisiert und entweder die Bereitstellung (HTTP 404) oder die Weiterleitung (HTTP 301) an den normalisierten Pfad im Falle von GET ablehnt.

    
Morten Haraldsen 10.03.2017, 16:38
quelle