2009-11-19 9 views
8

हमें सीम एक्शन से क्लाइंट के आईपी पते को लॉग इन करने की आवश्यकता है। वर्तमान में, हम कोड का उपयोग कर रहे:HttpServletRequest.getRemoteAddr() गलत पता लौटा रहा है

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); 
HttpServletRequest request = (HttpServletRequest)context.getRequest(); 

this.remoteAddress = request.getRemoteAddr(); 

बहरहाल, यह हमेशा नहीं बल्कि ग्राहक के आईपी पते से हमारे नेटवर्क का एक आंतरिक पते के लौटने किया जाना है, लगता है। मेरे शोध से, ऐसा लगता है कि नेटवर्क में एक रिवर्स प्रॉक्सी होने से चीजों को भ्रमित कर सकते हैं, लेकिन हम अपने वेब सर्वर को पुन: कॉन्फ़िगर करके इसे ठीक करने में सक्षम हो सकते हैं। क्या किसी और को यह समस्या है, और आपने इसे कैसे हल किया?

हम जेबॉस 5.1 ऐप सर्वर और अपाचे वेब सर्वर का उपयोग कर रहे हैं। धन्यवाद!

उत्तर

6

आप एक प्रॉक्सी 'के माध्यम से देखते' और का उपयोग कर

request.getHeader("X-FORWARDED-FOR"); 

मुझे लगता है कि मूल अनुरोधकर्ता और अपने सर्वर के बीच दुर्व्यवहार करने वाला प्रॉक्सी सही मूल्य में परिणाम सकता है X-FORWARDED-FOR हैडर से मूल अनुरोधकर्ता का पता प्राप्त कर सकते हैं खो दिया गया।

रेफरी: wikipedia description of X-FORWARDED-FOR

+0

इससे HTTP प्रॉक्सी की मदद मिलेगी, लेकिन एनएटी फ़ायरवॉल के लिए बहुत कुछ नहीं होगा। – bmargulies

+0

धन्यवाद कि यह अच्छी जानकारी है, लेकिन प्रॉक्सी दुर्व्यवहार क्या कर सकता है? मेरी समझ यह है कि अगर सब कुछ सही तरीके से कॉन्फ़िगर किया गया है, तो request.getRemoteAddr() को "x_forwarded_for" शीर्षलेख को किसी भी तरह से देखना चाहिए, और यदि यह सही तरीके से सेट नहीं है, तो वह शीर्षलेख भी वहां नहीं हो सकता है। –

3

आपको क्या करना होगा x-forwarded-for की तरह, एक विशेष शीर्षक में मूल आईपी पते पारित करने के लिए अपने रिवर्स प्रॉक्सी के लिए है। फिर आप इस हेडर को अपने सर्वलेट से पुनर्प्राप्त कर सकते हैं। इसके अतिरिक्त, आप इस आईपी पते को लॉग इन करने के लिए अपनी लॉग फ़ाइल को संशोधित करना चाह सकते हैं। उदाहरण:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="access_log." suffix=".txt" 
      fileDateFormat="yyyy-MM-dd" 
      pattern="%{x-forwarded-for}i %l - %t &quot;%r&quot; %s %b &quot;%{referer}i&quot; &quot;%{user-agent}i&quot;" 
      resolveHosts="false"/>