【问题标题】:J2ME: Set security permission programmaticallyJ2ME:以编程方式设置安全权限
【发布时间】:2012-02-10 10:19:01
【问题描述】:

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

【问题讨论】:

  • 不,但是第二个应用程序是在 netbeans 中创建的,奇怪的是,当我添加在 eclipse 中创建的 jar 并在 netbeans 中运行它时,它工作正常,因为 eclipse 提出了这个错误。跨度>

标签: java-me midp ksoap


【解决方案1】:

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

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

查看article mentioned above 了解有关权限的更详细概述。

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

【讨论】:

  • 是的,我已添加所有权限,但尚未签名。将尝试获得证书,虽然我仍然想知道它是如何在 netbeans 上工作的,但是当我在 eclipse 中重新创建相同的项目时它失败了。
  • 你的netbeans可能已经有那些登录认证。向您的团队负责人或项目经理询问。
  • 如果您要复制他人的话,请提供正确的署名。我已经在这里完成了,但请确保您以后自己执行此操作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2015-08-08
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多