2009-03-06 16 views
5

मैंने एक मूल ऐपलेट रखा है जहां उपयोगकर्ता अपनी हार्ड ड्राइव से फ़ाइल का चयन करता है, यह इस फ़ाइल की पहली पंक्ति को पढ़ता है और कुछ अतिरिक्त प्रीप्रोकैसिंग के लिए जावास्क्रिप्ट पर जाता है, और फिर जब आप एक क्लिक करते हैं बटन यह HTTP फ़ाइल अनुरोध के माध्यम से उस फ़ाइल को अपलोड करने का प्रयास करता है। मुझे फ़ाइलों को अपलोड करने के लिए एक बहुत ही बुनियादी ओपन सोर्स एप्लेट मिला जो मैंने कॉपी किया और इस आखिरी बिट के लिए संशोधित किया।जावा ऐप्पल अनुमतियां

समस्या यह है कि, यह काफी काम नहीं करता है। ऐसा लगता है कि यह ठीक चल रहा है, लेकिन फिर मैं अनुमतियों से संबंधित दो स्नैग में चला जाता हूं। जावा कंसोल में संदेशों का कहना है कि एप्लेट का उपयोग निम्न दो अनुमतियों पर त्रुटियों से इनकार किया था कि:

java.lang.RuntimePermission setFactory 
java.io.FilePermission read 

मैं यह अजीब लगता है, क्योंकि मैंने सोचा कि मैं जब मैं के साथ इसे बनाया पहले से ही एप्लेट करने की अनुमति दी थी " स्वयं-हस्ताक्षरित "विकल्प नेटबीन में चेक किया गया, और उसके बाद ब्राउज़र में छोटी सुरक्षा पॉप-अप की पुष्टि करने के लिए क्लिक किया गया।

इसके अलावा, जिस हिस्से को मैंने स्वयं कोड किया था, जहां यह फ़ाइल पढ़ता है और जावास्क्रिप्ट पर पहली पंक्ति को ठीक करता है ठीक काम करता है। यह एक स्पष्ट स्पष्ट संकेतक है कि एप्लेट स्थानीय फाइल सिस्टम से पढ़ने में सक्षम है! समस्या तब तक शुरू नहीं होती जब तक कि मैं वास्तव में अपलोड शुरू करने का प्रयास नहीं करता। मुझे लगता है कि एक बात ध्यान में रखनी है, यह है कि अपलोड प्रक्रिया एक नए धागे में चलती प्रतीत होती है, जबकि बाकी सभी मुख्य वर्ग में थ्रेड बनाये बिना चलते हैं।

मैं जावा के लिए कुल नौसिखिया हूं और जावा में धागे के बारे में बहुत कम जानता हूं; क्या मुझे किसी भी तरह इस नए धागे पर अनुमतियां पारित करने की आवश्यकता है? या प्रभाव के लिए कुछ है? अग्रिम धन्यवाद।

उत्तर

3

आपको शायद विशेषाधिकार प्राप्त ऑपरेशन करने की अनुमति के लिए सुरक्षा प्रबंधक (कोड, व्यवस्थापक नहीं) से पूछने की आवश्यकता है। विभिन्न कारणों से, आमतौर पर एक ऐप्पल स्थानीय फाइल खोलने में सक्षम होने के लिए यह अच्छी बात नहीं है, इसलिए यह बहुत भारी है।

मूल कुंजी AccessController.doPrivileged() पर कॉल करना है और जावा रैंच अक्सर पूछे जाने वाले प्रश्न पर good little tutorial है।

+0

doPrivileged बेहद खतरनाक है। एप्लेट पर हस्ताक्षर कर रहा है। –

+3

एप्लेट को फ़ाइलों को पढ़ने की अनुमति दे रहा है। कोई भी कम नहीं, यह वहां है और सवाल का जवाब है। –

0

ऐसा शायद इसलिए है क्योंकि जावास्क्रिप्ट हस्ताक्षरित है। मैं दृढ़ता से सुझाव देता हूं कि कोड पर हस्ताक्षर न करें, खासकर यदि आप नहीं जानते कि आप क्या कर रहे हैं। 6u10 से (मैक पर अभी तक नहीं) एप्लेट्स JNLP का उपयोग FileOpenService सहित कर सकते हैं, इसलिए आपको साइन इन करने की आवश्यकता नहीं है।

+0

जावास्क्रिप्ट नहीं; जावा। – Ricket

+0

सवाल यह है कि जावास्क्रिप्ट शामिल है। मेरा शिक्षित अनुमान यह है कि इसकी जावास्क्रिप्ट उस एक्सेस कंट्रोल संदर्भ में है जो समस्या पैदा कर रहा है। –

1

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

इस तरीके को मेरे लिए काम किया (एक कतार जो एप्लेट के माध्यम से लूप को आदेश जोड़ने): कोई भी एक पृष्ठ पर मौजूद JavaScript को संशोधित करने और बदलने के क्या में खिलाया रही है कर सकते हैं: http://blog.carrythezero.com/?p=5

सुनिश्चित करें कि आप खतरों यहाँ समझते हैं एप्लेट। मेरे मामले में मुझे पता है कि कोड कभी भी वेबसर्वर पर नहीं जा रहा है, और कक्षा को हस्ताक्षरित किया गया है, इसलिए यह मेरी नीति फ़ाइल द्वारा दिए गए विशिष्ट स्थान तक विफल रहेगा।

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