In un'applicazione Spring Boot ho impostato un filtro con mappatura url /service1/*
. Questo è stato fatto usando un FilterRegistrationBean
.Spring MVC Percorso che ignora la doppia barra //
V'è anche un controller mappato al stesso modello:
@RestController @RequestMapping(path = "/service1")
class Service1 {
...
Il problema:
Esecuzione POST http://localhost:8080/service1/hello
funziona come previsto (ossia il filtro è coinvolto nella catena di elaborazione richiesta, e il controller del servizio invocato). Tuttavia, l'esecuzione di http://localhost:8080//service1/hello
(notare la doppia barra) ignorerà il filtro, ma arriverà comunque al controller a causa di Spring MVC, algoritmo di corrispondenza del percorso più lento.
Ho letto che l'algoritmo di corrispondenza del percorso del controller può essere personalizzato (collegamento: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching), tuttavia non trovo un'opzione per non ignorare le doppie barre.
Importante: questo comportamento indica che qualsiasi Controller protetto da un filtro (non Spring Security, ma qualsiasi filtro personalizzato) può essere ignorato semplicemente mettendo una doppia barra in qualsiasi parte dell'URL. La mia comprensione è corretta? Sapete se la corrispondenza del percorso del controller MVC può essere ottimizzata in modo che le doppie barre non vengano ignorate nell'algoritmo di corrispondenza del percorso?
hai provato questo con FilterRegistrationBean.setOrder (int)? –
Sembra che il problema sia nel filtro, il modo in cui l'URL è corretto non è corretto. se usi la primavera 4, controlla questo http://stackoverflow.com/a/31158112/6401364. o pubblica la configurazione del tuo filtro e possiamo aiutarti – Hani