2010-11-12 14 views
17

हम इस बारे में अनजान हैं कि क्यों मेरे ग्राहक सफारी में जावा सुरक्षा अपवाद का सामना कर रहे हैं। क्या कोई मदद कर सकता है?मेरे एप्लेट को java.security क्यों मिलता है। एक्सेस कंट्रोल अपवाद: एक्सेस अस्वीकार (java.net.SocketPermission ...), और मैं इससे कैसे बच सकता हूं?

अपवाद विंडोज पर सफारी में विश्वसनीय रूप से होता है। इसमें जावा एप्लेट शामिल है। विंडोज विस्टा पर फ़ायरफ़ॉक्स और आईई 8 के साथ अपवाद भी होता है।

  1. Safari खोलें विंडोज पर

  2. लिए यहां क्लिक करें: http://www.cengraving.com/s/item?itemId=CH003

  3. पर क्लिक करें "अनुकूलित"

  4. (स्क्रीन के नीचे)

    यहाँ को चरणबद्ध कर रहे हैं

    "तत्काल सबूत" पृष्ठ लोड के बाद, "कार्ट में जोड़ें" पर क्लिक करें।

पूर्ण स्टैक ट्रेस: ​​

java.security.AccessControlException: access denied (java.net.SocketPermission www.cengraving.com resolve) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkConnect(Unknown Source) 
    at sun.plugin.security.ActivatorSecurityManager.checkConnect(Unknown Source) 
    at java.net.InetAddress.getAllByName0(Unknown Source) 
    at java.net.InetAddress.getAllByName(Unknown Source) 
    at java.net.InetAddress.getAllByName(Unknown Source) 
    at java.net.InetAddress.getByName(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) 
    at com.designapplet.a.f.a(Unknown Source) 
    at com.designapplet.ui.c.a(Unknown Source) 
    at com.designapplet.ui.c.for(Unknown Source) 
    at com.designapplet.ui.DesignApplet.buy(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source) 
    at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source) 
java.net.MalformedURLException: no protocol: 
    at java.net.URL.<init>(Unknown Source) 
    at java.net.URL.<init>(Unknown Source) 
    at java.net.URL.<init>(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation.checkLiveConnectCaller(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation.access$000(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source) 
java.net.MalformedURLException: no protocol: 
    at java.net.URL.<init>(Unknown Source) 
    at java.net.URL.<init>(Unknown Source) 
    at java.net.URL.<init>(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation.checkLiveConnectCaller(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation.access$000(Unknown Source) 
    at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source) 
+4

सॉकेट का उपयोग के साथ एप्लेट भागो एप्लेट से सामान्य रूप से अनुमतियों की आवश्यकता होती है। हालांकि, ऐप्पल को "घर पर कॉल करने" की अनुमति है, जो उनके द्वारा उत्पन्न सर्वर से कनेक्ट हो रहा है - जो आपका मामला प्रतीत होता है। मैंने पृष्ठ तक नहीं पहुंचा, लेकिन स्टैक ट्रेस से ऐसा लगता है कि कॉल जावास्क्रिप्ट से निकलती है। इसका अर्थ यह है कि जावास्क्रिप्ट अनुमतियां स्थिति को और जटिल करती हैं। यह एक सफारी बग हो सकता है। आप जावा एप्लेट कोड को लपेटने का प्रयास कर सकते हैं जो एक doPrivileged ब्लॉक में कनेक्शन खोलता है, जो समस्या का ख्याल रख सकता है। –

+0

अपवाद भी विंडोज विस्टा पर फ़ायरफ़ॉक्स और आईई 8 के साथ होता है ... कोई सुराग? – Crashalot

उत्तर

2

प्रतिक्रियाओं के लिए धन्यवाद।मैंने बक्षीस का पुरस्कार नहीं दिया क्योंकि जवाब सभी सहायक थे, किसी ने समस्या को हल नहीं किया।

आखिरकार, मैंने एप्लेट से डेटा को वेब पेज पर पास करके समस्या को हल किया, फिर सर्वर के साथ संवाद करने के लिए एक AJAX कॉल निष्पादित किया। निश्चित रूप से सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन यह अब तक प्रभावी साबित हुआ है।

इसे आज़माएं, और यह बताएं कि यह आपके लिए काम करता है या नहीं।

फिर से धन्यवाद!

0

इस एक एप्लेट है? अगर ऐसा है, तो आप इसे एक सॉकेट, का उपयोग करने के लिए अपने एप्लेट हस्ताक्षर करने की आवश्यकता है (जो तुम क्या कर रहे हो रहा है ...)

अधिक जानकारी के लिए यहाँ देखें:

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

+0

हाँ, यह एक एप्लेट है। क्या आपको पता है कि यह समस्या सफारी में क्यों होती है लेकिन अन्य ब्राउज़रों में नहीं? – Crashalot

+0

उत्तर के लिए धन्यवाद, बीटीडब्ल्यू, starkey! – Crashalot

+0

यह सभी प्लेटफार्मों पर सभी ब्राउज़रों में होता है। यह जावा का एक हिस्सा है। – Starkey

4

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

मैंने सफारी के साथ केवल इस सुरक्षा अपवाद को मान्यता दी (विंडोज़ के लिए 5.0.2, जेआरई 1.6.0_22)। आईई और फ़ायरफ़ॉक्स में एक ही एप्लेट अच्छी तरह से कर रहा है।

मुझे यह भी विश्वास है कि यह सफारी के जावा सैंडबॉक्स में एक बग है।


संपादित करें: doPrivileged का उपयोग मदद नहीं की, लेकिन मैं इस समाधान पाया: आप एक टाइमर घटना के माध्यम से अनुरोध किया निष्पादन से JavaScript कॉल "दसगुणा" हैं, निष्पादन अब सुरक्षा प्रतिबंध से प्रतिबंधित कर दिया जाएगा सफारी यहां खेल में डालता है। विस्तार से:

  • जावास्क्रिप्ट से कहा जाने वाला तरीका केवल javax.swing.Timer बनाता है (एक ईवेंट शेड्यूल करने के लिए, दोहराना-संपत्ति को गलत सेट किया जाना चाहिए)। आप देरी को काफी छोटा कर सकते हैं (उदाहरण के लिए 50 एमएस)।
  • विधि कॉल जिसे कॉल करने का इरादा है उसे एक्शनइवेंट श्रोता (एक्शनप्रोर्फ़ॉर्म) में रखा जाना चाहिए जिसे टाइमर द्वारा बुलाया जाता है।

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

मेरे परीक्षणों में केवल javax.swing.Timer ने आवश्यक decoupling प्रदान किया जबकि java.util.Timer उस उद्देश्य के लिए उपयोग नहीं किया जा सका।

+0

विंडोज विस्टा पर फ़ायरफ़ॉक्स और आईई 8 के साथ अपवाद भी होता है ... कोई सुराग? – Crashalot

+0

मैंने इसे ठीक किया। कृपया समाधान देखें। आपकी सहायताके लिए धन्यवाद! – Crashalot

0

यह एक सुरक्षा अपवाद के रूप में प्रकट हो रहा है, लेकिन समस्या वास्तव में एक बुरा यूआरएल है। यदि आप ढेर का पालन करते हैं, तो आप देखेंगे कि एक MalformedURLException है।

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

href में आप यूआरआई (उदा।, एचआरईएफ = "/ कुछपैथ") का उपयोग कर सकते हैं क्योंकि ब्राउजर यह हल करता है कि पृष्ठ के लिए यूआरएल के खिलाफ एक पूर्ण यूआरएल (उदाहरण के लिए, http://example.com/somepath) का उत्पादन करने के लिए।

आप [उचित यूआरएल कन्स्ट्रक्टर] [1] का उपयोग कर जावा में ऐसा कर सकते हैं।

अद्यतन: आह, मैं गलत पढ़ता हूं; मैंने सोचा कि एक सिंगल स्टैक ट्रेस था।

वहां एक बग होता था जहां लाइवकनेक्ट एक जार: यूआरएल तक पहुंच सकता था और एक मनमाना सॉकेट कनेक्शन प्राप्त कर सकता था। इसके लिए फिक्स लाइवकनेक्ट थ्रेड से यूआरएल कनेक्शन खोलने के साथ कोई समस्या पैदा कर सकता है। क्या होता है, अगर buy विधि में, आप कनेक्शन करने के लिए धागा शुरू करते हैं?

[1]: http://download.oracle.com/javase/6/docs/api/java/net/URL.html#URL(java.net.URL, java.lang.String)

+0

लेकिन मालफॉर्मर्डलेक्सप्शन बाद में स्टैक ट्रेस में होता है। शायद क्योंकि पहली अपवाद एप्लेट तर्क में कुछ तोड़ दिया। और AccessControlException स्पष्ट रूप से कहता है कि www.cengraving.com को हल करने की कोई अनुमति नहीं है। जहां वह एप्लेट स्थित है, तो यह वास्तव में अजीब है। –

+0

डेवन? सर्गेई की टिप्पणियों पर विचार? – Crashalot

+0

वाह स्टार्की और हच - क्षमा करें - डेवन, बिल्कुल वही प्रतिष्ठा है ... –

9

मैं एक ही समस्या थी। और एप्लेट पर हस्ताक्षर करने के स्वयं के द्वारा इस हल ...

निम्न चरणों के लिए प्रयोग किया जाता है और यह

javac AppletClass.java 
jar cvf AppletClass.jar AppletClass.class 
keytool -genkey -validity 3650 -keystore pKeyStore -alias keyName 
keytool -selfcert -keystore pKeyStore -alias keyName-validity 3650 
jarsigner -keystore pKeyStore AppletClass.jar keyName 

काम सिर्फ सवाल यह पूछेंगे का जवाब है और यह काम

नोट करना होगा: मैं था स्थानीय पढ़ने/लिखने की फ़ाइल के लिए त्रुटि प्राप्त करना

+0

धन्यवाद, क्या यह आईई और फ़ायरफ़ॉक्स पर हुआ? या सिर्फ सफारी? और कौन सा ओएस? – Crashalot

+0

यह नेटस्केप ब्राउज़र पर काम करेगा ... एफएफ क्रोम सफारी – Varun

+1

मैंने इसे ठीक किया। कृपया समाधान देखें। आपकी सहायताके लिए धन्यवाद! – Crashalot

0

लिनक्स पर यह काम करता है।

  • यह सामान्य है कि स्थानीय वर loc ऐप्लिकेशन कॉल के बाद परिभाषित किया गया है और वैसे भी इस्तेमाल नहीं किया:

    Add to cart बटन समारोह

    function saveLayout() { 
    
        showSaveMsg(); 
        var status = document.app.buy(); 
        var loc = "http://www.cengraving.com/s/cart"; 
    
        if (status == 'GOOD') { 
         window.location = getCartUrl(); 
        } else { 
         showErrorMsg(status); 
        } 
        } 
    

    कुछ टिप्पणियों को निष्पादित करता है?

  • इसके अलावा, trycatch मदद कर सकता है (जावास्क्रिप्ट में, app.buy() कॉल को लपेटकर)।

  • इसके अलावा, मैंने नेट पर कुछ शोध किया है, और कुछ लोगों को - एक ही त्रुटि है लेकिन एक अलग उपयोग से - ClassPath समस्या की रिपोर्ट करें। क्या आपके पास कुछ विशिष्ट है जो प्रासंगिक जेआरई का उपयोग करने से रोक सकता है?

+0

धन्यवाद, ring0। अनावश्यक "लोक" var नहीं देखा था। जब आप संबंधित जेआरई का उपयोग करने के लिए कुछ कहें, तो आपका क्या मतलब है? यह बग गहराई से रहस्यमय है। काश मैं समस्या अंक को हल करने के लिए प्रतिनिधि अंक खरीद सकता हूं और व्यापक दर्शकों को आकर्षित कर सकता हूं। – Crashalot

+0

हाय रिंग 0 ... क्या आपने पोस्ट किया गया समाधान देखा? अनावश्यक "लोक" चर को इंगित करने के लिए फिर से धन्यवाद। – Crashalot

0

जेआरई सैंडबॉक्स जावास्क्रिप्ट की उत्पत्ति विधि को हानिकारक चीजों को करने के लिए रोकने की कोशिश करता है लेकिन केवल एक चीज प्रोग्रामर जीवन को कठिन बना रही है।

मुझे सबसे अच्छा कामकाज मिला है जो निर्माता को & उपभोक्ता डिजाइन पैटर्न इवेंट कतार बनाने के लिए है जो जावास्क्रिप्ट मूल कॉल और वास्तविक "गंदे काम" के बीच बहुत ढीले युग्मन को लागू करता है।

वास्तव में क्या बेकार है कि एक कोड जो XP या Win7 में ठीक चलता है Vista में अपवाद फेंक सकता है।

+1

हमने समस्या हल की, हम सोचते हैं। कृपया हमारा समाधान देखें। इसे Vista पर भी काम करना चाहिए। – Crashalot

16

आप सुरक्षा प्रबंधक द्वारा उपयोग की जाने वाली डिफ़ॉल्ट सुरक्षा नीति फ़ाइल को ओवरराइड कर सकते हैं।

1) एक पाठ फ़ाइल बनाएँ (जैसे। Applet.policy)

2) एप्लेट

grant { 
    permission java.security.AllPermission; 
    }; 

3 करने के लिए सभी अनुमतियां मिल)

-J-Djava.security.policy=applet.policy 
+4

क्या यह केवल स्थानीय रूप से एक एप्लेट चलाने के लिए लागू नहीं होगा? ऐसा प्रतीत नहीं होता है कि यह एक दूरस्थ उपयोगकर्ता के कंप्यूटर पर ब्राउज़र में चल रहे एप्लेट पर लागू होगा, जो एक अधिक संभावित परिदृश्य की तरह दिखता है। – spaaarky21

+0

यह एक महान संकेत है! उन लोगों के लिए, जो फ़ायरफ़ॉक्स में आईसेडटा का उपयोग कर रहे हैं, यहां गाइड है कि इस नीति को क्लाइंट साइड पर कैसे सेट करें: http://icedtea.classpath.org/wiki/IcedTea- वेब- कस्टम- नीतियां – carbolymer