WebLogic पर सर्वलेट रीडायरेक्शन प्रोटोकॉल
वेब विकास में, ब्राउज़र स्वचालित रूप से रीडायरेक्ट करता है जब उसे कुछ
HTTP स्टेटस कोड के लिए "Location" हेडर के साथ एक प्रतिक्रिया मिलती है। कोड जो स्वचालित रीडायरेक्शन को ट्रिगर करते हैं, वे 3 से शुरू होते हैं। जावा सर्वलेट एपीआई का उपयोग करते समय, यानी, javax.servlet.http.HttpServletResponse.sendRedirect(String)
, यह
आमतौर पर एक 302 होगा।
जब आप अपने सर्वलेट एप्लिकेशन को टॉमकाट जैसी किसी चीज़ से WebLogic में माइग्रेट करते हैं, तो आपको एक अजीब बात का सामना करना पड़ सकता है जो "Location" हेडर को एक पूर्ण URL में मूल्यांकित करने का कारण बनता है। दुर्भाग्य से, यह एक रिवर्स-प्रॉक्सी के साथ अच्छा नहीं हो सकता है जो SSL को समाप्त करता है और HTTP पोर्ट पर WebLogic से कनेक्ट होता है।

WebLogic पूर्ण URL रीडायरेक्ट
WebLogic पर सर्वलेट HTTP प्रोटोकॉल के साथ एक स्थान पर रीडायरेक्ट कर सकता है, भले ही आप HTTPS
रिवर्स प्रॉक्सी के माध्यम से कनेक्ट हों (अग्रेषित हेडर की परवाह किए बिना)।
मान लीजिए हम https://example.com/app/foo पर एक POST भेजते हैं, जो एक रिवर्स-प्रॉक्सी के पीछे से sendRedirect("bar")
को लागू करने वाला एक WebLogic सर्वलेट होगा:
# अनुरोध हेडर (संक्षिप्तता के लिए असंबंधित हेडर को छोड़ दिया गया है)
POST /app/foo HTTP/1.1
Host: example.com
Origin: https://example.com
Referer: https://example.com/bar
रिवर्स-प्रॉक्सी से अनुरोध:
POST /app/foo HTTP/1.1
Host: [example.com]
X-forwarded-host: [example.com]
Upgrade-insecure-requests: [1]
X-forwarded-server: [example.com]
X-forwarded-for: [192.168.0.100]
X-forwarded-proto: [https]
X-forwarded-ssl: [on]
भले ही अग्रेषित हेडर मौजूद हैं, WebLogic HTTPS के बजाय HTTP स्थान के साथ प्रतिक्रिया करता है:
HTTP/1.1 302 Moved Temporarily
Location: http://example.com/app/bar
मिश्रित-सामग्री रीडायरेक्ट समाधान
आप इसके लिए विभिन्न समाधान पा सकते हैं:
- प्रॉक्सी पर प्रतिक्रिया हेडर को फिर से लिखें।
- एक कस्टम फ़िल्टर लागू करें जो प्रतिक्रिया हेडर को फिर से लिखेगा।
- WebLogic कंसोल में "WebLogic Plugin Enabled" विकल्प चालू करें और प्रॉक्सी पर "WL-Proxy-SSL: ON" अनुरोध हेडर जोड़ें।
- WebLogic कंसोल में WL फ्रंट एंड होस्ट और पोर्ट जोड़ें।
हालांकि, प्रदान की गई सर्वलेट लाइब्रेरी की सामग्री की जांच करने के बाद, मुझे एहसास हुआ कि सबसे सुरक्षित और सरल समाधान रीडायरेक्शन के दौरान पूर्ण URL मूल्यांकन को अक्षम करना था।
इसे डीबग करने के लिए, मैंने
sendRedirect()
विधि पर एक ब्रेकपॉइंट लगाया, मनमाने ढंग सेgetClass().getProtectionDomain().getCodeSource().getLocation()
निष्पादित किया।HttpServletResponse
कार्यान्वयन का स्थान दिए जाने पर मैंने इसे अपने IDE में क्लासपाथ में जोड़ा: /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar!/weblogic/servlet/internal/ServletResponseImpl.class (आधिकारिक 12.1.2.4 छवि डॉकर से)।
पता चलता है कि आप इसे WEB-INF/weblogic.xml
वेब एप्लिकेशन डिस्क्रिप्टर में कर सकते हैं, जैसे (स्वैप करें 1.9
XSD संस्करण को एक संस्करण के साथ
आपके WebLogic के साथ संगत):
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd">
<context-root>/app</context-root>
<container-descriptor>
<redirect-with-absolute-url>false</redirect-with-absolute-url>
</container-descriptor>
</weblogic-web-app>
XSD फ़ाइल से टिप्पणी: यदि redirect-with-absolute-url तत्व को गलत पर सेट किया गया है, तो सर्वलेट कंटेनर पुनर्निर्देशन में स्थान हेडर में सापेक्ष यूआरएल को पूर्ण यूआरएल में परिवर्तित नहीं करेगा।