कुछ पृष्ठभूमि को लागू करने():सार्वजनिक कार्यों दूर से सुलभ हो जाते हैं जब onCFCRequest
मैं दूरस्थ सीएफसी नियमित CFM पृष्ठ अनुरोधों से अलग से कॉल को संभालने के लिए onCFCRequest()
उपयोग कर रहा हूँ। यह मुझे सभी दूरस्थ अनुरोधों के लिए त्रुटियों को पकड़ने और एमआईएम प्रकारों को साफ करने की अनुमति देता है।
समस्या:
मैंने गलती remote
के बजाय public
उपयोग करने के लिए मेरे दूरस्थ सीएफसी कार्यों में से कुछ की स्थापना की और महसूस किया कि वे अभी भी जब दूर से कहा जाता है काम कर रहे थे।
आप नीचे देख सकते हैं, onCFCRequest()
की मेरी कार्यान्वयन अपने पूरे आवेदन, जहां एक HTTP अनुरोध किसी HTTP-सुलभ सीएफसी पर किसी भी public
विधि आह्वान करने के लिए इस्तेमाल किया जा सकता में एक भारी सुरक्षा छेद बनाया गया है।
REPRO कोड:
Application.cfc में:
public any function onCFCRequest(string cfc, string method, struct args){
cfc = createObject('component', cfc);
return evaluate('cfc.#method#(argumentCollection=args)');
}
एक सीएफसी में दूर से कहा जाता है:
public any function publicFunction(){
return 'Public function called remotely!';
}
प्रश्न:
मुझे पता है कि मैं यह सत्यापित करने के लिए विधि को आमंत्रित करने से पहले घटक के लिए मेटा डेटा देख सकता हूं कि यह दूरस्थ पहुंच की अनुमति देता है, लेकिन क्या मैं अन्य समस्याएं इस समस्या से संपर्क कर सकता हूं?
स्पष्ट रूप से यह मेरा कार्यान्वयन है कि यहां समस्या है। प्रत्येक रिमोट अनुरोध के लिए मेटाडेटा पर लूपिंग ऐसा लगता है जैसे यह बहुत महंगा ओवरहेड पेश करेगा। फ़ंक्शन मेटा डेटा किसी सरणी में होता है (इसे स्ट्रक्चर कुंजी से पकड़ने के लिए कोई शॉर्टकट नहीं), और यदि सीएफसी एक और सीएफसी बढ़ा रहा है, तो मुझे विरासत श्रृंखला जारी रखना होगा, खोजने के लिए प्रत्येक विधि को जांचना होगा (या नहीं मिला) सही एक। Blech। – imthepitts
आपको सिर्फ यह जांचने की आवश्यकता है कि क्या कहा जा रहा तरीका दूरस्थ है या नहीं, निश्चित रूप से? मैं इस बारे में ब्लॉगिंग के बीच में हूं (प्रेरणा के लिए धन्यवाद)। जल्द ही लिंक के साथ मेरा जवाब अपडेट कर देगा (+ 1h, मुझे कल्पना है)। –
@imthepitts अगर आप 'GetComponentMetaData()' का उपयोग करते हैं तो आपको कम ओवरहेड मिलता है (यह स्थैतिक है)।या वैकल्पिक रूप से, रिमोट विधियों का नामकरण करने का एक सम्मेलन चुनें, फिर आप विधि नाम में त्वरित जांच कर सकते हैं। – Henry