2011-11-20 14 views
54

मैंने जावा में एक सर्वलेट लिखा था और मैं जानना चाहता हूं कि HTTP या HTTPS का उपयोग करके उस सर्वलेट को अनुरोध निष्पादित किया गया था या नहीं।मुझे कैसे पता चलेगा कि HTTP या HTTPS का उपयोग कर सर्वलेट को अनुरोध निष्पादित किया गया था?

मैंने सोचा कि मैं request.getProtocol() का उपयोग कर सकता हूं लेकिन यह दोनों विधियों पर HTTP/1.1 लौटाता है।

कोई विचार?

उत्तर

83

HttpSerlvetRequest.isSecure() जवाब है की परवाह किए बिना काम करना चाहिए। ServletContainer निम्नलिखित मामलों में सत्य लौटने के लिए ज़िम्मेदार है:

  • यदि ServletContainer स्वयं https पर अनुरोध स्वीकार कर सकता है।
  • यदि ServletContainer के सामने एक लोडबैंसर है। और, लोडब्लैंसर को https पर अनुरोध मिला है और इसे सादा http पर ServletContainer पर भेज दिया गया है। इस मामले में, लोडबैंसर एक्स-एसएसएल-सिक्योर भेजता है: सच हेडलेटकॉन्टेनर को हेडर, जिसे सम्मानित किया जाना चाहिए।

कंटेनर भी इस अनुरोध को उपलब्ध जिम्मेदार बताते हैं जब अनुरोध https पर प्राप्त होता है बनाना चाहिए:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509 प्रमाण पत्र
+1

क्या आप कृपया साझा कर सकते हैं कि आपको 'एक्स-एसएसएल-सुरक्षित: सत्य' बिट कहां मिला? मैं खोज करता रहता हूं और मुझे इस हेडर पर अधिक जानकारी नहीं मिल रही है। – Zotov

+0

यह मेरे पर्यावरण पर काम नहीं करता है: अपाचे 2.4.10 फ्रंट प्रॉक्सी के रूप में; यह जावा में जानना असंभव लगता है, अनुरोध है कि अनुरोध http या https के साथ अपाचे के लिए किया गया है। निश्चित रूप से, मैं इसे जावा के लिए http के रूप में प्राप्त करता हूं, लेकिन मुझे यह जानने की ज़रूरत है कि फ्रंट प्रॉक्सी का उपयोग कैसे किया गया है। - वास्तव में, जैसा कि @ ज़ोटोव ने भी उल्लेख किया है: X-SSL-Sercure शीर्षलेख के बारे में लगभग कोई जानकारी नहीं है।तो मुझे लगता है कि यह व्यापक रूप से लागू नहीं किया गया है ?! – badera

+0

हेडर नाम भिन्न हो सकता है क्योंकि यह बहुत मानक नहीं है। लेकिन, यहां अवधारणा यह है कि प्रॉक्सी एसएसएल के बारे में हेडर जोड़ सकती है और सर्वर उन्हें पढ़ सकते हैं। एक्स के लिए, Nginx एक्स-एसएसएल-प्रोटोकॉल जोड़ता है। इसे कस्टम हेडर के साथ भी बदला जा सकता है। –

10

isSecure। विरासत विधियों की जांच करना सुनिश्चित करें।

-3

https और http विभिन्न बंदरगाहों पर चलता है। तो आप अनुरोध से पोर्ट प्राप्त कर सकते हैं और पता लगा सकते हैं कि अनुरोध किस पोर्ट से आया था और ताकि आप प्रोटोकॉल को जान सकें। int पोर्ट = request.getServerPort();

+4

@ कृष्णन बंदरगाह संख्या मनमानी हैं ... मैं 44 पर HTTP चला सकता हूं 3 और एचटीटीपीएस 80 या उसके किसी भी संयोजन पर। – hd1

23

आप विश्वसनीय रूप से पोर्ट नंबरों पर निर्भर नहीं हो सकते हैं।
लेकिन आप योजना पर निर्भर कर सकते हैं:

का उपयोग करें: अगर यह https है request.getScheme() को देखने के लिए।

यदि यह है तो यह सुरक्षित कनेक्शन है।

मेरा मानना ​​है कि इस बिलाव संस्करण

+1

isSecure कम से कम [1.2] (http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29) पर वापस चला जाता है, और यह टॉमकैट-विशिष्ट नहीं है । –

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