2012-03-14 13 views
24

हालांकि यह मूर्खतापूर्ण लगता है, मैं Play 2.0 में क्लाइंट के आईपी प्राप्त करने का कोई तरीका नहीं ढूंढ पाया। यह 1.2.x में Http.Request.remoteAddress के रूप में उपलब्ध था, लेकिन 2.0 (मैंने मुख्य रूप से स्कैला एपीआई की जांच की, लेकिन मैंने जावा की एक त्वरित जांच भी की) केवल play(.api).mvc.Request में अनुरोध के सर्वर पक्ष के बारे में जानकारी प्रदान करता है। क्या मुझे कुछ याद आ रही है? निकटतम हैक मैं अभी इस बारे में सोच सकता हूं इसे एक रिवर्स प्रॉक्सी के पीछे स्थापित कर रहा है और फिर X-Forwarded-For की जांच कर रहा है, लेकिन यह देव में बहुत अच्छा काम नहीं करता है।क्लाइंट आईपी कैसे प्राप्त करें?

+0

हाय, अगर आपके पास कोई एचटीपी अनुरोध है, तो आपने 'play.api.http.HeaderNames.FROM' के साथ एक चाल का उपयोग करने का प्रयास किया है और अनुरोध हेडर शायद आप किसी भी तरह से प्राप्त कर सकते हैं? –

+0

से उपयोगकर्ता द्वारा अनुरोध करने का ईमेल पता। सुनिश्चित नहीं है कि यह –

उत्तर

13

संपादित करें: इस उत्तर के लिए वापस आ रहा है, इस playframework 2.0.2 में जोड़ा गया: https://groups.google.com/forum/#!msg/play-framework/Z97GQ2VnR5M/T-STGaeuN68J%5B1-25%5D पर जारी घोषणा और http://www.playframework.org/documentation/api/2.0.2/scala/index.html#play.api.mvc.Request

पर अधिक महत्वपूर्ण बात एपीआई दस्तावेज़ देखें अब वहाँ के रूप में आप देख सकते हैं Request.remoteAddress

मूल के लिए समर्थन करते हैं:

वर्तमान में नजर में एक बग इस के लिए खुला है: https://play.lighthouseapp.com/projects/82401/tickets/256-add-back-requestheaderremoteaddress

मुझे लगता है कि प्ले किए गए पैच को शामिल करने के लिए play2.0 पुस्तकालयों को हैक करना वर्तमान में सबसे अच्छा शर्त है। एक्सएफएफ हेडर जोड़ने और आईपी निर्धारित करने के लिए इसका उपयोग करने के एकमात्र उद्देश्य के साथ प्रॉक्सी का उपयोग करने की तुलना में यह शायद अभी भी क्लीनर है।

+2

असल में, मैंने इसे पोस्ट किया, और मैं वह हूं जिसने पैच बनाया है। –

+1

मुझे लगता है कि अब हम सुरक्षित रूप से यह मान सकते हैं कि यह Play टीम द्वारा 'ओप्स' था। शर्मिंदा कोई भी 2.0 फाइनल से पहले नहीं देखा। हो सकता है कि बग्रेपोर्ट अभी भी 'नहीं, आप इसे आसानी से कुछ और तरीके से कर सकते हैं'। लेकिन मुझे शक है। – Martijn

+0

हाँ, यह मेरा विचार भी था, इसे खोजने में असमर्थ होने के बाद। उस भावना को तब ओलिवियर के जवाब से मजबूर किया गया जो संदर्भ http://www.playframework.org/documentation/2.0/HTTPServer जो वास्तव में संदर्भ का संदर्भ देता है .remoteAddress (हालांकि यह वास्तव में मौजूद नहीं है)। –

7

https://github.com/orefalo/play2-xforward

पर इस Github परियोजना की जांच करें मैं Play1 से कोड लिया और Play2 करने के लिए इसे भेजा है, यह एक ही काम करना चाहिए।

फिर भी कार्य प्रगति पर ...

+0

नहीं करेगा, यह _your_ डोमेन/ip है। –

+0

क्या आप निश्चित हैं? इसे इस तरह के 'आलसी वैल होस्ट के रूप में पढ़ा जाता है: स्ट्रिंग = headers.get (play.api.http.HeaderNames.HOST) .getOrElse ("")' मुझे लगता है क्योंकि यह अनुरोध से पढ़ा जाता है। यह स्थानीय आईपी/डोमेन नहीं हो सकता है। अब यदि आप पोस्ट पढ़ते हैं, तो यह बताता है कि मूल होस्ट को 'ProxyPreserveHost On' –

+5

btw के साथ कैसे संरक्षित किया जाए, आपकी समस्या को ठीक करने की कोशिश करने के लिए धन्यवाद! –

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