2009-12-03 13 views
7

मैं सोचता हूं कि एक कॉन्फ़िगरेशन समस्या के साथ मैं अटक गया हूं। मुझे एक फ़ोल्डर जो मेरी वास्तविक टोमकैट एप्लिकेशन के भीतर से एक निश्चित आईपी रेंज तक पहुंच से बचाने की आवश्यकता है।टॉमकैट वाल्व सेटिंग्स

मैंने सोचा कि यह serverfault था, इसलिए मैंने there पर सवाल पोस्ट किया। अभी मैं या यकीन नहीं है कि यह इसलिए है नहीं कर रहा हूँ एस एफ वैसे भी ...

फिर भी मैं कोशिश कर रहा पर रखा यह geting अपने आप से जा रहा है और लगा कि मैं

org.apache.catalina.valves.RemoteAddrValve 
कि के लिए

निर्धारित करने की आवश्यकता मेरा फ़ोल्डर अफसोस की बात है कि मुझे यह नहीं मिल सकता है कि मुझे सेटिंग बनाने की आवश्यकता है। web.xml, server.xml? दोनों की कोशिश की, शून्य सफलता। क्या कोई भी इस पर मेरी सहायता कर सकता है।

तिया

कश्मीर

+0

मैंने अपने उत्तर में फ़िल्टर के बारे में एक अनुभाग जोड़ा है। मुझे लगता है कि आपको यही चाहिए। त्वरित उत्तर के लिए –

उत्तर

7

यह server.xml में अपने <Context> तत्व के अंदर जाना चाहिए:,

<Context 
    path="/tcadmin" 
    docBase="${catalina.home}/server/webapps/admin" 
    privileged="true" 
> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="127\.0\.0\.1" 
    /> 
</Context> 

बस याद रखें कि स्ट्रिंग मान regex पैटर्न, ऐसी क्या खास बात regex चरित्र (जैसे डॉट (।)) बैकस्लाश से बचने के लिए है।

EDIT: ओपी की टिप्पणी के जवाब में। मुझे लगता है कि आपको अपने वेब ऐप में FILTER को कार्यान्वित करने की आवश्यकता है और इसे अपने रिमोट एड्रेस आईपी के आधार पर अनुरोधों को स्वीकार या अस्वीकार करने के लिए कॉन्फ़िगर करना है। रिमोट पता ServletRequest ऑब्जेक्ट से doFilter विधि में पारित किया जा सकता है।

आप अपने web.xml फ़ाइल में एक फिल्टर की घोषणा:

<filter> 
    <filter-name>GatekeeperFilter</filter-name> 
    <filter-class>your.package.GatekeeperFilter</filter-class> 
    <init-param> 
    <param-name>allowedNetwork</param-name> 
    <param-value>192\.168\.2\.*</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>GatekeeperFilter</filter-name> 
    <url-pattern>/path/to/protected/folder</url-pattern> 
</filter-mapping> 

क्या init पैरामीटर स्वीकार करने के लिए किया जा करने की आवश्यकता है के बारे में जुड़ा हुआ लेख पढ़ें। मुझे लगता है कि आपके फैसले के लिए आप अनुरोधकपरवेल्व से कोड को लापरवाही से कॉपी कर सकते हैं।

+0

पहला थाक्स, (+1)। दुख की बात है कि यह अभी तक काम नहीं कर रहा है। अब तक मेरे server.xml में कोई संदर्भ खंड नहीं रहा है। असल में आवेदन खुद को विश्व सुलभ होना चाहिए। वहां केवल एक फ़ोल्डर, मूल रूप से कुछ पीडीएफ युक्त फ़ोल्डर केवल कुछ आईपी द्वारा ही पहुंचा जा सकता है। ऐप के भीतर उस फ़ोल्डर के लिए एक साधारण एक href लिंक है। अगर ग्राहक मेरे आंतरिक नेट से है तो सबकुछ ठीक है। यदि ग्राहक बाहरी है तो फ़ोल्डर उसके लिए खुला नहीं होना चाहिए। क्या मेरा दृष्टिकोण अभी भी सही है? – KB22

4

आपको इसे <Context> तत्व में रखना होगा जो प्रश्न में वेबप्लिकेशंस को निश्चित करता है।

बिलाव के लिए यह कई स्थानों, प्रत्येक webapp विशेष के तहत (और webapp नियंत्रित) /META-INF/context.xml या सर्वर विशेष (और सर्वर-नियंत्रित) /conf/[enginename]/[hostname]/context.xml या सर्वर विशेष वैश्विक /conf/context.xml या होस्ट-विशिष्ट /conf/server.xml हो सकता है । Tomcat Context documentation भी देखें।

2

टॉमकैट वाल्व पूरे इंजन, होस्ट या एक विशिष्ट संदर्भ (वेबएप) पर लागू किया जा सकता है। आपको इसे संपूर्ण ऐप के लिए उपयोग करना होगा, विशिष्ट पथ या निर्देशिका नहीं।

आपको इसे अपने मेटा-आईएनएफ/context.xml या conf/Catalina/[host] निर्देशिका में अपने संदर्भ खंड में सेट करना चाहिए। उदाहरण के लिए,

<Context path="/myapp" ...> 
    ... 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="10.1.2.*"/> 
</Context> 
+1

सहायक। मैं अपनी साइट को उचित आईपीवी 4 ब्लॉक पर ऐसा करने में सक्षम हूं। हालांकि, यह आईपीवी 6 के लिए काम नहीं कर रहा है। क्या ऐसा करने का कोई अलग तरीका है, या क्या टॉमकैट में अभी भी पूर्ण आईपीवी 6 समर्थन नहीं है? –

+0

@BrianKnoblauch, tomcat * करता है * आईपीवी 6 का समर्थन करता है, देखें [रोक-पहुंच-से-निश्चित-वेब-ऐप-इन-टोमकैट 6] (http://stackoverflow.com/questions/2149719/prevent-access-to-certain-webapps- इन-टोमकैट 6) –

+0

ऐसा लगता है कि इसे आईपीवी 6 का समर्थन करने के लिए टोमकैट के कस्टम निर्माण की आवश्यकता है (पूर्व निर्मित बाइनरी इसका समर्थन नहीं करते हैं)। अभी तक काम कर रहे आईपीवी 6 के साथ टोमकैट का पूरा निर्माण करने के लिए निर्भरताओं/विकल्पों के सही संयोजन को खोजने में असमर्थ। तो, हाँ यह इसका समर्थन करता है, लेकिन वास्तव में अच्छी किस्मत इसे चल रहा है। ;-) –

3

ही जरूरत थी के रूप में आप (लेकिन अन्य कारणों के लिए) पिछले सप्ताह और पथ से अनुरोध ब्लॉक करने के लिए एक वाल्व बनाया। यह org.apache.catalina.valves.RequestFilterValve पर आधारित है।

उपयोग:

<Valve className="se.qbranch.tomcat.valve.BlockAccessByPathValve" path="/manager/.*" allow="127\.0\.0\.1"/>

वाल्व इंजन, होस्ट या प्रसंग बस किसी भी वाल्व के रूप में इस्तेमाल किया जा सकता है और GitHub पर उपलब्ध है। http://github.com/xlson/tomcat-valves

यदि मैं आपकी समस्या हल करता हूं तो मैं आपके एप्लिकेशन में डिफ़ॉल्ट टॉमकैट वाल्व या सर्वलेट फ़िल्टर का उपयोग करने का सुझाव दूंगा। कस्टम वाल्व की आवश्यकता के कारण यह था कि टॉमकैट प्रबंधन अनुप्रयोग Psi-Probe के कुछ हिस्सों में "रिसाव" होगा, भले ही हमने RemoteAddrValve को <Context> एप्लिकेशन में उपयोग किया था।