2012-02-10 83 views
0

我創建了一個J2ME應用程序,並將它添加爲另一個應用程序中的jar。原始應用程序以最大權限運行並且工作正常,但是當我在第二個應用程序中將它添加爲jar時,在進行Web服務調用時出現安全異常,並且我注意到該應用程序正在以最低安全級別運行。J2ME:以編程方式設置安全權限

我已經在JAD中爲http和https添加了midlet權限。

javax.microedition.io.Connector.http, javax.microedition.io.Connector.https 

有關如何解決這個問題的任何想法?我得到的錯誤是如下:

java.lang.SecurityException: Application not authorized to access the restricted API 
    at com.sun.midp.security.SecurityToken.checkForPermission(+459) 
    at com.sun.midp.security.SecurityToken.checkForPermission(+15) 
    at com.sun.midp.midletsuite.MIDletSuiteImpl.checkForPermission(+20) 
    at com.sun.midp.dev.DevMIDletSuiteImpl.checkForPermission(+28) 
    at com.sun.midp.dev.DevMIDletSuiteImpl.checkForPermission(+7) 
    at com.sun.midp.io.ConnectionBaseAdapter.checkForPermission(+67) 
    at com.sun.midp.io.j2me.http.Protocol.checkForPermission(+17) 
    at com.sun.midp.io.ConnectionBaseAdapter.openPrim(+6) 
    at javax.microedition.io.Connector.openPrim(+299) 
    at javax.microedition.io.Connector.open(+15) 
    at org.ksoap2.transport.ServiceConnectionMidp.<init>(+11) 
    at org.ksoap2.transport.HttpTransport.getServiceConnection(+11) 
    at org.ksoap2.transport.HttpTransport.call(+51) 
    at com.vxceed.xnappexpresssync.comm.WebserviceCall.call(+28) 
    at com.vxceed.xnappexpresssync.comm.WebserviceCall.callServiceMethod(+112) 
    at com.vxceed.xnappexpresssync.utility.Generic.sendRequest(+22) 
    at com.vxceed.xnappexpresssync.main.Authentication.authenticateUser(+77) 
    at app.ui.ServerSync.sendServerRequest(+127) 
    at app.ui.LoginScreen.authenticateUser(+9) 
    at app.ui.LoginScreen.isLoginValidate(+76) 
    at app.ui.LoginScreen.keyPressed(+48) 
    at app.ui.MainAppScreen$Clean.run(+33) 
    at java.util.TimerThread.mainLoop(+237) 
    at java.util.TimerThread.run(+4) 
+0

是您的原始應用程序簽名? – 2012-02-14 04:57:33

+0

不,但第二個應用程序是在netbeans中創建的,奇怪的是,當我添加在eclipse中創建的jar並在NetBeans中運行它時,eclipse發出此錯誤時它工作正常。 – Mal 2012-02-16 10:03:21

回答

1

發佈解決方案以防萬一。

問題出在模擬器上。當我使用J2ME SDK 3.0和DefaultCldcPhone1時,它工作正常。

2

喬納森克努森國"Understanding MIDP 2.0's Security Architecture"

MIDP 2.0規範定義的 權限的開放式系統。爲了進行任何類型的網絡連接,MIDlet必須具有相應的權限 。例如,使用HTTP 與服務器交談的MIDlet必須具有打開HTTP連接的權限。 MIDP 2.0中定義的權限對應於網絡協議 ,但該體系結構允許可選API定義其自己的 權限。

每個權限都有唯一的名稱;的MIDP 2.0權限是:

  • javax.microedition.io.Connector.http
  • javax.microedition.io.Connector.socket
  • javax.microedition.io.Connector.https
  • 的javax。 microedition.io.Connector.ssl
  • javax.microedition.io.Connector.datagram
  • javax.microedition.io.Connector.serversocket
  • javax.microedition.io.Connector.datagramrec eiver
  • javax.microedition.io.Connector.comm
  • javax.microedition.io.PushRegistry

如果您使用了以上的API那麼你的.jar文件必須以正確的登錄證書進行簽名。

查看article mentioned above瞭解有關權限的更詳細概述。

您可以從Verisign購買此類證書。

+0

是的,我已經添加了所有權限,但尚未簽名。將嘗試獲得證書,但我仍然想知道它如何在netbeans上工作,但是當我在eclipse中重新創建相同的項目時,它失敗了。 – Mal 2012-02-19 05:56:13

+0

好吧,你的netbeans可能已經在那裏登錄了認證。請向您的團隊負責人或項目經理詢問。 – Android 2012-02-19 06:01:17

+0

如果您要複製其他人的單詞,請提供適當的歸屬。我已經在這裏完成了,但確保你自己在將來做到這一點。 – 2012-05-24 20:36:31