2012-01-11 13 views
6

तक पहुंचने के लिए मैक पता प्राप्त करें मैं वेबसाइट से तैनात करने के लिए जावा वेबस्टार्ट एप्लिकेशन लिख रहा हूं ताकि उपयोगकर्ता मेरे सॉफ़्टवेयर पर क्लिक करके चला सकें। फ़ाइलों की पहुंच का दुरुपयोग करने से बचने के लिए मुझे एक अद्वितीय मशीन पहचान की आवश्यकता है। मैं क्लाइंट के मैक पते को एक अद्वितीय कुंजी के रूप में उपयोग करना चाहता हूं ताकि सर्वर यह सुनिश्चित कर सके कि कोई क्लाइंट बहुत अधिक डाउनलोड न हो।जावा वेबस्टार्ट एप्लिकेशन कैसे मेरे वेबपृष्ठ

बेशक, एक उपयोगकर्ता के पास कई नेटवर्क कार्ड हो सकते हैं, तो मेरा जावा एप्लिकेशन नेटवर्क कार्ड के मैक पते को कैसे निर्धारित कर सकता है जिसे उपयोगकर्ता मेरी वेबसाइट तक पहुंचने के लिए उपयोग कर रहा है?

+4

यदि कोई उपयोगकर्ता अपने मैक पता बदल जाता है जब बार-बार इस प्रतिबंध को नाकाम करने के लिए क्या होता है? –

उत्तर

6

आप नेटवर्क इंटरफेस प्राप्त करने के लिए java.net.NetworkInterface.getNetworkInterfaces का उपयोग कर सकते हैं, और मैक पता प्राप्त करने के लिए getHardwareAddress() पर कॉल कर सकते हैं।

आप if.isLoopBack() (जहां "अगर" इंटरफ़ेस ऑब्जेक्ट है) के साथ लूपबैक फ़िल्टर करना चाहते हैं। किसी भी इंटरफ़ेस को फ़िल्टर करें जहां if.getHardwareAddress() शून्य देता है। फिर एक उठाओ। आप उन्हें नाम से सॉर्ट कर सकते हैं, if.getName(), और पहले ले लो। आपके उद्देश्यों के लिए यह वास्तव में कोई फर्क नहीं पड़ता कि यह वास्तविक फ़ाइलों का उपयोग करने के लिए उपयोग किया जाने वाला वास्तविक इंटरफ़ेस है या नहीं, बस आप कंप्यूटर को किसी भी तरह पहचान सकते हैं। अंत में अगर .getHardwareAddress() आपको मैक पते के साथ बाइट्स की एक सरणी देता है। यदि आप एक स्ट्रिंग चाहते हैं, तो प्रत्येक बाइट को "% 02x" .format (बाइट) के साथ प्रारूपित करें और उन्हें ":" से विभाजक के रूप में शामिल करें।

जैसा कि किसी अन्य उत्तर में सुझाया गया है, PersistenceService का उपयोग करना बेहतर हो सकता है।

मैक पते का उपयोग करना उपयोगी हो सकता है यदि आप एक ही उपयोगकर्ता के लिए अलग-अलग कंप्यूटरों पर अलग-अलग कंप्यूटर पर अलग-अलग डेटा जारी रखना चाहते हैं, जहां उपयोगकर्ता के पास प्रत्येक कंप्यूटर पर एक ही फाइल/होमडिर्स हैं। आप उस URL के हिस्से के रूप में मैक पते का उपयोग कर सकते हैं जो आप PersistenceService # create() पर पास करते हैं और प्राप्त करते हैं()। उपयोगी यदि आप प्रति-उपयोगकर्ता डेटा के बजाय प्रति-कंप्यूटर डेटा चाहते हैं।

लघु उदाहरण स्काला कोड:

7

..machine पहचान ..

क्यों नहीं बजाय 'सत्र पहचान' का एक प्रकार है? प्रत्येक ऐप के रूप में। भार (आप प्रति पीसी एक ऐप को लागू करने के लिए SingleInstanceService को कार्यान्वित करना चाहते हैं।) क्या यह एक अद्वितीय सत्र स्थापित करने के लिए सर्वर से संपर्क करता है। प्रत्येक अनुरोध के लिए इसे पहचानने के लिए इसका उपयोग करें।

उपयोगकर्ता को उनके भत्ते का उपयोग करके और ऐप को रोकने/पुनरारंभ करने से रोकने के लिए। (एक समय सीमा के भीतर), PersistenceService का उपयोग करके कुछ विवरण स्टोर करें।

+0

यह निश्चित रूप से समाधानों में से एक है। यदि उपयोगकर्ता मेरी वेबसाइट से वेब स्टार्ट पर क्लिक करता है, तो मैं सत्र आईडी जारी कर सकता हूं। एक और सेनारियो यह है कि मैं इस एप्लिकेशन को उपयोगकर्ताओं को वितरित करता हूं ताकि वे इसे चलाने के लिए डेस्कटॉप पर जार फ़ाइल पर क्लिक कर सकें या यदि वेबसाइट पर लॉगिन पृष्ठ नहीं है। फिर कोई सत्र आईडी नहीं है (क्या मैं सही हूँ?)। मैक पते का उपयोग करना एक तरीका है जिसे मैं इस स्थिति में उपयोगकर्ताओं की पहचान करने के बारे में सोच सकता हूं। असल में मैं उपयोगकर्ताओं को हर बार लॉगिन करने में बहुत परेशानी देने से बचने की कोशिश कर रहा हूं। लेकिन मैं यह जानना चाहता हूं कि कोई वेब सर्वर का दुरुपयोग कर रहा है या नहीं। धन्यवाद। –

+0

कृपया [उत्तर स्वीकार करें] (http://meta.stackexchange.com/a/5235/155831) अगर यह समस्या को हल करने में मदद करता है। –

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