2016-03-08 7 views
9

स्प्रिंग बूट एप्लिकेशन में अनदेखा करते हुए मैंने यूआरएल मानचित्रण /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 किया जा सकता है ताकि पथ मिलान एल्गोरिदम में डबल स्लेश को अनदेखा नहीं किया जाएगा?

+0

क्या आपने इसे फ़िल्टररिएस्ट्रेशन Bean.setOrder (int) के साथ प्रयोग किया था? –

+0

लगता है कि समस्या आपके फ़िल्टर में है, जिस तरह से आप यूआरएल से मेल खाते हैं वह सही नहीं है। यदि आप वसंत 4 का उपयोग कर रहे हैं तो यह http://stackoverflow.com/a/31158112/6401364 देखें। या अपने फ़िल्टर की कॉन्फ़िगरेशन पोस्ट करें और हम मदद कर सकते हैं – Hani

उत्तर

0

स्प्रिंग एमवीसी मानचित्रण और जेनेरिक सर्वलेट फ़िल्टरों को इंगित करने के लिए कुछ भी नहीं होना चाहिए। एंटी-पैटर्न और सर्वलेट-मैपिंग अलग-अलग मानकों हैं, और // की व्याख्या को ध्वस्त/सामान्यीकृत किया जा सकता है या नहीं।

मैं बस होगा:

ए) /* के लिए अपने फिल्टर रजिस्टर और फिल्टर में मिलान करते हैं।

बी) वसंत में कस्टम AntPathMatcher सेटअप करें।

सी) अपने फ़िल्टर से पहले एक फ़िल्टर पंजीकृत करें जो यूआरएल-पथ को सामान्यीकृत करता है और या तो जीईटी के मामले में सामान्यीकृत पथ पर (HTTP 404) या रीडायरेक्ट (HTTP 301) को अस्वीकार करने से इनकार करता है।

संबंधित मुद्दे