0

我创建了一个 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)
4

2 回答 2

2

正如 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.datagramreceiver
  • javax.microedition.io.Connector.comm
  • javax.microedition.io.PushRegistry

如果您使用上述 API,那么您的 .Jar 文件必须使用正确的签名证书进行签名。

查看上面提到的文章以获取有关权限的更详细概述。

例如,您可以从Verisign购买此类证书。

于 2012-02-17T09:56:12.967 回答
1

发布解决方案以防它帮助某人。

问题出在模拟器上。当我使用 J2ME SDK 3.0 和 DefaultCldcPhone1 时,它运行良好。

于 2012-02-27T09:41:26.757 回答