我创建了一个J2ME应用程序,并将其作为jar添加到另一个应用程序中。原始应用程序以最大权限运行并且工作正常,但是当我在第二个应用程序中将其添加为jar时,我在进行Web服务调用时遇到安全异常,并且我注意到该应用程序运行的安全性最低。
我也在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 :(得分:2)
Jonathan Knudsen在"Understanding MIDP 2.0's Security Architecture"中说:
MIDP 2.0规范定义了一个开放式系统 权限。要进行任何类型的网络连接,MIDlet必须 有适当的许可。例如,使用HTTP的MIDlet 与服务器通信必须具有打开HTTP连接的权限。 MIDP 2.0中定义的权限对应于网络协议, 但该架构允许可选的API定义自己的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.datagramreceiver
- javax.microedition.io.Connector.comm
- javax.microedition.io.PushRegistry
如果您使用上述API,那么您的.Jar文件必须使用正确的签名证书进行签名。
查看article mentioned above以获取有关权限的详细概述。
您可以从Verisign购买此类证书。
答案 1 :(得分:1)
发布解决方案,以防有人帮助。
问题在于模拟器。当我使用J2ME SDK 3.0时,使用DefaultCldcPhone1它运行正常。