HttpServletRequest - संदर्भित URL कैसे प्राप्त करें?


144

मुझे उन URL को लॉग इन करना होगा जो मेरी साइट को जावा सर्वलेट में लिंक कर रहे हैं।


क्या मैंने आपको सही ढंग से समझा कि अगर मैंने Google में आपकी साइट ढूंढी और लिंक खोला तो आपने 'google.com' लॉग इन किया?
रोमन

जवाबों:


310

यह HTTP refererहेडर में उपलब्ध है । आप इसे एक सर्वलेट में प्राप्त कर सकते हैं:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

हालाँकि, आपको यह महसूस करने की आवश्यकता है कि यह एक क्लाइंट-नियंत्रित मूल्य है और इस प्रकार किसी चीज़ को पूरी तरह से अलग या हटा दिया जा सकता है। इस प्रकार, जो भी मूल्य वापस आता है, आपको उसका उपयोग बैकएंड में किसी भी महत्वपूर्ण व्यावसायिक प्रक्रियाओं के लिए नहीं करना चाहिए, बल्कि केवल प्रस्तुति नियंत्रण के लिए (जैसे कुछ शुद्ध लेआउट भागों को छिपाना / दिखाना / बदलना) और / या आँकड़े।

रुचि के लिए, विकिपीडिया में गलत वर्तनी के बारे में पृष्ठभूमि पाई जा सकती है ।


2
क्या इससे "रेफर" और "रेफर" का फर्क पड़ता है?
12:00 बजे ante.sabo

7
@ कांट: नहीं, हेडर लुकअप केस असंवेदनशील है।
बालुसक

2
ध्यान दें कि कोई भी शीर्ष लेख हो सकता है null
आरडीएस

@BalusC क्या होगा अगर मुझे दो पिछले url की आवश्यकता है? हो सकता ?
एंजेल क्वेंका

26

वास्तव में यह है: request.getHeader("Referer")या इससे भी बेहतर, और 100% निश्चित होना request.getHeader(HttpHeaders.REFERER), जहां HttpHeaders हैcom.google.common.net.HttpHeaders


11
विधि के लिए जावा ईई एपीआई डॉक्स से getHeader(String name)(उद्धरण):"The header name is case insensitive."
informatik01

7
HttpHeaders संदर्भ के लिए वैसे भी upvote। अपाचे HTTP एक और अच्छा एक है:org.apache.http.HttpHeaders
Barett

16

URL अनुरोध में पारित किए गए हैं request.getRequestURL():।

यदि आप अन्य साइटों से मतलब रखते हैं जो आपको लिंक कर रही हैं? आप HTTP रेफ़रर को कैप्चर करना चाहते हैं, जिसे आप कॉल करके कर सकते हैं:

request.getHeader("referer");

6

जैसा कि सभी ने उल्लेख किया है

request.getHeader("referer");

मैं स्वीकृत उत्तर के विपरीत संदर्भ शीर्ष लेख के सुरक्षा पहलू के बारे में कुछ और विवरण जोड़ना चाहूंगा । ओपन वेब एप्लीकेशन सिक्योरिटी प्रोजेक्ट ( ओडब्ल्यूएएसपी ) में चिट शीट धोखा देती है, क्रॉस-साइट रिक्वेस्ट फॉरगेरी (सीएसआरएफ) प्रिवेंशन चीट शीट के तहत इसमें रेफर हेडर के महत्व के बारे में उल्लेख किया गया है ।

यह समान रूप से अनुशंसित मूल उत्पत्ति की जांच के लिए, कई HTTP अनुरोध हेडर जावास्क्रिप्ट द्वारा निर्धारित नहीं किए जा सकते हैं क्योंकि वे 'निषिद्ध' हेडर सूची में हैं। केवल ब्राउज़र ही इन हेडरों के लिए मान निर्धारित कर सकते हैं, जिससे उन्हें अधिक भरोसेमंद बनाया जा सकता है क्योंकि एक XSS भेद्यता का उपयोग उन्हें संशोधित करने के लिए भी नहीं किया जा सकता है।

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

आप यहाँ निषिद्ध हेडर सूची का उल्लेख कर सकते हैं । उपयोगकर्ता एजेंट (यानी: ब्राउज़र) का पूरा नियंत्रण इन हेडर पर है न कि उपयोगकर्ता पर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.