2010-08-09 10 views
11

परिभाषित किया गया है, मैं प्रमाणीकरण को संभालने के लिए filters का उपयोग कर रहा हूं और Grails एप्लिकेशन के लिए कुछ अन्य पूर्व-शर्त जांच करता हूं। मैंने ऐसी परिस्थिति में भाग लिया है जहां यह सुनिश्चित करना अच्छा होगा कि फिल्टर ए हमेशा फिल्टर बी से पहले आक्रमण किया जाता है।Grails फ़िल्टर के आमंत्रण अनुक्रम को

प्रलेखन के अनुसार "फ़िल्टर को परिभाषित करने के क्रम में निष्पादित किया जाता है" लेकिन यह है अस्पष्ट क्या परिभाषा को संदर्भित करता है। मुझे पता है कि यह जावा ईई सर्वलेट फ़िल्टर के लिए कैसे काम करता है, जहां अनुक्रम वेब.एक्सएमएल में संबंधित टैग के क्रम द्वारा घोषित किया जाता है, लेकिन जैसा कि तैनाती को Grails में स्वचालित रूप से संभाला जाता है, मुझे सच में यकीन नहीं है कि मैं आदेश को प्रभावित कर सकता हूं जिसमें फ़िल्टर स्थापित किए जाते हैं।

क्या यह संभव है Grails में, और यदि हां, तो कैसे?

अद्यतन

कई फिल्टर एक वर्ग के भीतर घोषित कर रहे हैं, यह स्पष्ट है कि वे आदेश है कि वे घोषित किया गया में मार डाला जाएगा। मैं विभिन्न वर्गों में परिभाषित फिल्टर और अनुक्रम है कि उन कक्षाओं में विचार किया जाएगा के साथ और अधिक चिंतित हूं।

उत्तर

7

Molske है कि वे कक्षा में परिभाषित क्रम में निष्पादित कर रहे हैं सही है। एक अपवाद यह है कि पहला 'पहले' फ़िल्टर जो झूठी स्टॉप प्रोसेसिंग देता है।

एक नया कॉन्फ़िगरेशन विकल्प 'dependOn' भी है जिसका उपयोग आप विभिन्न फ़िल्टर कक्षाओं को ऑर्डर करने के लिए कर सकते हैं, यानी MyFilters2 MyFilters1 के बाद चलता है। http://grails.org/doc/latest/

+0

धन्यवाद, यह कॉन्फ़िगरेशन विकल्प है जिसे मैं –

+1

http://www.grails.org/doc/latest/guide/single.html#6.6.4%20Filter%20 प्रत्यक्ष लिंक के लिए निर्भरता –

+0

+1 पहले झूठी वापसी के लिए देख रहा था {} आगे फ़िल्टर प्रोसेसिंग को रोकने के लिए, बस जो मैं खोज रहा था ;-) – virtualeyes

0
class MyFilters { 
    def filters = { 
    myFilter2(controller:'*', action:'*') {} 
    myFilter1(controller:'*', action:'*') {} 
    } 
} 

उपरोक्त उदाहरण में, myFilter2 पहले निष्पादित किया जाएगा, उसके बाद, myFilter1 निष्पादित किया जाएगा।

आदेश फिल्टर फिल्टर श्रेणी में परिभाषित कर रहे हैं, ताकि वे में क्रियान्वित कर रहे हैं।

+0

लिख सकते हैं मुझे लगता है कि मुझे लगता है कि मेरे सवाल में स्पष्ट नहीं किया (मुझे लगता है कि ठीक कर देंगे), यह विभिन्न वर्गों में परिभाषित फिल्टर के बारे में है। कि कक्षा के भीतर फ़िल्टर को अनुक्रमित किया जाएगा जिसे वे परिभाषित कर चुके हैं, निश्चित रूप से पूरी तरह से समझ में आता है। –

3
class MyFilters{ 
def dependsOn=[OtherFilters] 
    def filters= { 
     doSomething(uri:"/*"){ 
     //logic 
     } 
    } 
} 

पर "6.6.4 फ़िल्टर निर्भरता" देखो अन्य फिल्टर में आप

class OtherFilters{ 
    def filters={ 
     doAnotherThing(uri:"/*"){ 
      before={ 
      //do other thing 
      } 
     } 
    } 
} 
संबंधित मुद्दे