我创建了一个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)
正如Jonathan Knudsen在"理解MIDP 2.0的安全体系结构"中所说:
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.datagramsreceiver
- javax.microedition.io.Connector.comm
- javax.microedition.io.PushRegistry
如果您正在使用上述API,那么您的.Jar文件必须使用正确的签名证书进行签名。
查看上面提到的文章,了解有关权限的详细概述。
例如,您可以从Verisign购买此类证书。
发布解决方案,以防对他人有所帮助。
模拟器出现问题。当我使用J2ME SDK 3.0和DefaultCldcPhone1时,它运行得很好。