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?
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.
Tags und Links java spring spring-mvc spring-boot url-mapping