2011-06-02 18 views
7

जावा सर्वलेट में, मैं क्लाइंट के आईपी पते के आधार पर उपयोगकर्ताओं से आने वाले http अनुरोधों को कैसे थ्रोट कर सकता हूं? मैं एक विशेष स्रोत आईपी पते से प्रति सेकंड एक्स अनुरोधों से अधिक सेवा नहीं करना चाहता हूं, जहां एक्स कॉन्फ़िगर करने योग्य है और व्यावहारिक मान [0.1; 10] रेंज (प्रति सेकंड 10 से 10 अनुरोधों में 1 अनुरोध से)।जावा सर्वलेट में थ्रॉटल HTTP अनुरोध

उत्तर

2

मैं उस कार्य के लिए एक फ़िल्टर लिखूंगा।

3

एक सर्वलेट फिल्टर का उपयोग करें: यदि आप जेट्टी 7.0 पर हैं या उच्चतर वहाँ this

2

है @EJP ने कहा, एक HashMap कि आईपी पते कुंजी द्वारा पिछले उपयोग समय संग्रहीत करता है के साथ एक फिल्टर का उपयोग कर। एक दूसरे के अनुरोध 10 कॉल के बीच 100ms का अनुवाद करेंगे, न्यूनतम। एक सर्वर व्यस्त त्रुटि कोड को वापस भेजना और अनुरोध को मारना कनेक्शन द्वारा उपयोग किए जाने वाले संसाधनों को जल्दी से बंद कर देगा। अपाचे के लिए प्रीबिल्ट समाधान हैं यदि यह आपके लिए एक विकल्प है।

1

जांचें कि क्या आप जिस कंटेनर का उपयोग कर रहे हैं, वह इस तरह की अस्वीकार सेवा प्रदान करता है। यदि नहीं, तो आपको फ़िल्टर के साथ जाना होगा।

ServletRequest.getRemoteHost() आपको क्लाइंट आईपी तक पहुंच प्रदान करता है।

4

कोड.google.com पर होस्ट की गई ओवास्प-एसापी-जावा परियोजना में थ्रॉटल फ़िल्टर का कार्यान्वयन होता है जिसे आप "जैसा है" का उपयोग कर सकते हैं या अपने लिए प्रेरणा के रूप में उपयोग कर सकते हैं।

आप नीचे दिए गए लिंक पर कोड की जाँच कर सकते हैं:

http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/filters/RequestRateThrottleFilter.java

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