2012-08-24 14 views
8

मेरे पास एक वेब एप्लिकेशन है और इसके लिए मैं उन ग्राहकों के आईपी पते को कैप्चर करना चाहता हूं जो मेरी वेबसाइट तक पहुंच रहे हैं ताकि मैं जान सकूं कि कौन सा क्षेत्र एप्लिकेशन तक पहुंच रहा है। मैं अपने आवेदन में Java EE का उपयोग कर रहा हूं।यह निर्धारित करने के लिए कि मेरी वेबसाइट का आईपी पता किस प्रकार पहुंचा है?

यदि हम शीर्षलेख के बारे में बात करते हैं और request अंतिम उपयोगकर्ता से भेजा जाता है तो शायद कुछ समाधान होता है।

+0

आम तौर पर आपकी होस्टिंग कंपनी ऐसी सुविधाएं प्रदान करेगी – adarshr

+2

आपकी पसंद का सर्वलेट कंटेनर सभी क्लाइंट एक्सेस लॉग करेगा। यदि आप प्रोग्राम को आईपी प्राप्त करना चाहते हैं, तो [ServletRequest.getRemoteAddr()] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr%28%29) का उपयोग करें। –

+0

अरे आपके द्वारा बताई गई एपीआई विधि दिलचस्प लगती है। मैंने वास्तव में इसे अपने सर्वलेट पर उपयोग किया जिसके लिए अनुरोध jsp पेज से भेजा जा रहा है। लेकिन फिर भी यह कोई मूल्य नहीं दिखा रहा है। क्या मुझे इस उद्देश्य के लिए request.get पैरामीटर विधि() का उपयोग करने की आवश्यकता है, लेकिन कैसे ??? – Prateek

उत्तर

15

से इंटरफ़ेस ServletRequest या तरीकों getHeaders() प्रपत्र इंटरफ़ेस HttpServletRequest उपयोग विधि getRemoteAddr():

HttpServletRequest httpRequest = (HttpServletRequest) request; 
String userIpAddress = httpRequest.getHeader("X-Forwarded-For"); 

वहाँ विधि getRemoteAddr प्रयोग करने के लिए एक सावधानी है:

सुनिश्चित करें कि आप विधि का उपयोग कर सकते हैं और सामान्य स्थिति में आप मिल जाएगा ग्राहक का आईपी। हालांकि, यदि उपयोगकर्ता प्रॉक्सी के पीछे है तो विधि बेकार है। इस मामले में आपको प्रॉक्सी सर्वर का आईपी पता मिलेगा, न कि क्लाइंट। लेकिन प्रॉक्सी में विशेष HTTP हेडर में अनुरोध करने वाले क्लाइंट आईपी शामिल हो सकते हैं। तो वास्तविक क्लाइंट-आईपी कॉल विधि getHeader("X-Forwarded-For") पुनर्प्राप्त करने के लिए।

JSP में एक उदाहरण उपयोग:

उपयोग सेट आईपी पते के सत्र में JSTL का उपयोग कर मूल्य:

<c:set var="userIp" value="${requestScope.header('x-forwarded-for')}" scope="session" /> 

और फिर एक सुविधाजनक स्थान में सत्र से इस मूल्य मिलता है।

JSP में आप <c:out value="${sessionScope.userIp}" /> या सर्वलेट में उपयोग कर सकते हैं के रूप में session.getAttribute('userIp');

कृपया docs पढ़ें:

java.lang.String getRemoteAddr() ग्राहक के इंटरनेट प्रोटोकॉल (आईपी) पते रिटर्न या अंतिम प्रॉक्सी जिसने अनुरोध भेजा था।

+0

आपकी सही दिशा के लिए धन्यवाद। लेकिन यहां ठीक है कि इस विधि का उपयोग jsp पर करें जहां फॉर्म है और सबमिट बटन है। या अंतिम सर्वलेट के अंदर जहां यह वास्तव में जाता है और फिर डेटा को डेटाबेस में सबमिट करता है। – Prateek

+0

आपके पास 'अनुरोध' तक पहुंच होनी चाहिए। [जेएसटीएल] (http://www.oracle.com/technetwork/java/index-jsp-135995.html) का उपयोग करके सत्र में आईपी पते का सेट वैल्यू का उपयोग करें: ''। और फिर इस मूल्य को सुविधाजनक स्थान पर सत्र से प्राप्त करें। जेएसपी में '' या सर्वलेट में 'session.getAttribute ('userIp') के रूप में;'। – kapand

+0

जब मैं इस विधि का उपयोग करता हूं तो आउटपुट डेटाबेस में 'शून्य /' आता है, जबकि getRemoteAddr() के मामले में डेटाबेस आउटपुट '0: 0: 0: 0: 0: 1 /: के रूप में आता है। इसका क्या अर्थ है। – Prateek

0

अनुरोध वस्तु आपके जेएसपी से उत्पन्न सर्वलेट विधि के लिए जावा तर्क के रूप में पारित की गई है। तर्क का नाम है ... इसके लिए प्रतीक्षा करें ... request

तो आप इसे अपने जेएसपी में एम्बेडेड एक स्क्रिप्टलेट में संदर्भित करने में सक्षम होना चाहिए; जैसे

<% 
     InetAddress addr = request.getRemoteAddr(); 
     // blah blah blah 
    %> 

यह बहस योग्य है कि आपको जेएसपी में इस तरह की चीज करनी चाहिए या नहीं। इसे आम तौर पर "सर्वोत्तम अभ्यास" के रूप में स्वीकार किया जाता है कि जेएसपी को केवल स्वरूपण आउटपुट के लिए उपयोग किया जाना चाहिए। वेबपैप का व्यावसायिक तर्क एक नियंत्रक सर्वलेट में होना चाहिए जो अंततः जेएसपी सर्वलेट को HTML (या जो कुछ भी) उत्पन्न करने के लिए आगे बढ़ता है।

यदि आप किसी व्यापारिक तर्क को जेएसपी में डाल रहे हैं, तो स्क्रिप्टलेट को बनाए रखना मुश्किल होता है ... यद्यपि यदि आप हैं तो आईपी पता प्रदर्शित करने जा रहे हैं, जो चिंता नहीं होनी चाहिए। (इंजीनियरिंग परिप्रेक्ष्य से पसंदीदा दृष्टिकोण टैग और जेएसपी अभिव्यक्ति भाषा का उपयोग करना है।)

अंत में, इस बात की कोई गारंटी नहीं है कि getRemoteAddr() द्वारा आईपी पता वास्तविक क्लाइंट आईपी पता होगा। यह प्रॉक्सी का पता हो सकता है, या यहां तक ​​कि एक पूर्ण निर्माण भी हो सकता है।

+1

सबसे पहले, विधि [getRemoteAddr()] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr%28%29) इंटरफ़ेस से संबंधित है [ServletRequest] (http : //docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr%28%29) और इसे [HttpServletRequest] (http: // docs] के लिए अनुरोध डालने की आवश्यकता नहीं है। oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html)। इसके अलावा, यह विधि विधि हमेशा उपयोगकर्ता आईपी पता नहीं लौटा सकती है। तीसरे में लिपिलेट खराब अभ्यास हैं। – kapand

+0

मुझे एमवीसी पता है लेकिन ऊपर की तरह एक स्क्रिप का उपयोग करने से मुझे किसी भी तरह हल करने में मदद मिल सकती है क्योंकि आईपी पता प्राप्त करने के लिए एक छिपे पैरामीटर का उपयोग करना भी संभव नहीं है। अनुरोध ऑब्जेक्ट के साथ पैरामीटर ले जाने के लिए मुझे कहीं भी <%%> स्क्रिप का उपयोग करना होगा। लेकिन यह त्रुटि दे रहा है। क्या मुझे इसे उसी फ़ॉर्म में रखने की ज़रूरत है जो डेटा भेज रहा है। – Prateek

+0

यदि आप केवल शुद्ध जेएसपी का उपयोग करते हैं तो आप स्क्रिप्टलेट्स का उपयोग करके अपनी समस्या का समाधान कर सकते हैं: '<% // आपका जावा कोड%>'। तथ्य यह है कि जेएसपी अंततः एक सर्वलेट में बदल गया। इसलिए यह कोड वैसे ही काम करेगा। यह एक छोटी परीक्षा परियोजना के लिए एक स्वीकार्य समाधान है, लेकिन अगर ऐसा विकास और विकास होगा तो यह कोड समझने और बनाए रखने के लिए असुविधाजनक होगा। – kapand

1

उपर्युक्त उत्तरों (एंड्री और स्टीफन द्वारा) के साथ कुछ analytics टूल का भी उपयोग करें। यह आपको आपकी वेबसाइट पर आने वाले यातायात की एक बड़ी तस्वीर देगा। ऐसा एक उदाहरण Google Analytics है।

+0

मेरे पास एक Google Analytics खाता है। लेकिन एप्लिकेशन के अंदर मैं एक ग्राफ को साजिश करना चाहता हूं जो कि मुझे मिली अद्वितीय आईपी हिट के आधार पर। उस Google Analytics के लिए मदद नहीं कर सकता है। – Prateek

+0

@pKs: मैं सहमत हूं। यदि आप इसे अपने आवेदन में उपभोग करना चाहते हैं तो आप एनालिटिक्स का उपयोग नहीं कर सकते हैं। – pratikabu

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

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