स्प्रिंग बूट एप्लिकेशन में अनदेखा करते हुए मैंने यूआरएल मानचित्रण /service1/*
के साथ एक फ़िल्टर स्थापित किया है। यह FilterRegistrationBean
का उपयोग करके किया गया था।स्प्रिंग एमवीसी पथ मिलान डबल स्लैश //
वहाँ भी एक नियंत्रक एक ही पैटर्न को मैप किया है:
@RestController @RequestMapping(path = "/service1")
class Service1 {
...
समस्या:
निष्पादित पोस्ट http://localhost:8080/service1/hello
काम करता है के रूप में उम्मीद (यानी फिल्टर, अनुरोध संसाधन श्रृंखला में शामिल है और सेवा नियंत्रक ने आह्वान किया)। हालांकि, http://localhost:8080//service1/hello
(डबल स्लैश नोट करें) को निष्पादित करना फ़िल्टर को बाईपास करेगा, लेकिन स्प्रिंग एमवीसी के अधिक लचीला पथ मिलान करने वाले एल्गोरिदम के कारण भी नियंत्रक तक पहुंच जाएगा।
मैंने पढ़ा है कि नियंत्रक पथ मिलान करने वाले एल्गोरिदम को अनुकूलित किया जा सकता है (लिंक: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching), हालांकि मुझे डबल स्लेश को अनदेखा न करने का विकल्प नहीं मिला है।
यह भी महत्वपूर्ण है: इस व्यवहार का अर्थ है कि फ़िल्टर द्वारा संरक्षित कोई भी नियंत्रक (स्प्रिंग सुरक्षा नहीं, लेकिन कोई कस्टम फ़िल्टर नहीं) को यूआरएल के किसी भी हिस्से में डबल स्लैश डाला जा सकता है। क्या मेरी समझ सही है? क्या आप जानते हैं कि एमवीसी नियंत्रक पथ मिलान को tweaked किया जा सकता है ताकि पथ मिलान एल्गोरिदम में डबल स्लेश को अनदेखा नहीं किया जाएगा?
क्या आपने इसे फ़िल्टररिएस्ट्रेशन Bean.setOrder (int) के साथ प्रयोग किया था? –
लगता है कि समस्या आपके फ़िल्टर में है, जिस तरह से आप यूआरएल से मेल खाते हैं वह सही नहीं है। यदि आप वसंत 4 का उपयोग कर रहे हैं तो यह http://stackoverflow.com/a/31158112/6401364 देखें। या अपने फ़िल्टर की कॉन्फ़िगरेशन पोस्ट करें और हम मदद कर सकते हैं – Hani