J2ME:以编程方式设置安全权限

发布于 2025-01-04 06:48:08 字数 1759 浏览 1 评论 0原文

我创建了一个 J2ME 应用程序并将其作为 jar 添加到另一个应用程序中。原始应用程序以最大权限运行并且工作正常,但是当我将其添加为第二个应用程序中的 jar 时,我在进行 Web 服务调用时遇到安全异常,并且我注意到该应用程序正在以最低安全性运行。

我还在 JAD 中添加了 http 和 https 的 midlet 权限。

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

知道如何解决这个问题吗?我得到的错误如下:

java.lang.SecurityException:应用程序无权访问受限 API
  在 com.sun.midp.security.SecurityToken.checkForPermission(+459)
  在 com.sun.midp.security.SecurityToken.checkForPermission(+15)
  在 com.sun.midp.midletsuite.MIDletSuiteImpl.checkForPermission(+20)
  在 com.sun.midp.dev.DevMIDletSuiteImpl.checkForPermission(+28)
  在 com.sun.midp.dev.DevMIDletSuiteImpl.checkForPermission(+7)
  在 com.sun.midp.io.ConnectionBaseAdapter.checkForPermission(+67)
  在 com.sun.midp.io.j2me.http.Protocol.checkForPermission(+17)
  在 com.sun.midp.io.ConnectionBaseAdapter.openPrim(+6)
  在 javax.microedition.io.Connector.openPrim(+299)
  在 javax.microedition.io.Connector.open(+15)
  在 org.ksoap2.transport.ServiceConnectionMidp.(+11)
  在 org.ksoap2.transport.HttpTransport.getServiceConnection(+11)
  在 org.ksoap2.transport.HttpTransport.call(+51)
  在 com.vxceed.xnappexpresssync.comm.WebserviceCall.call(+28)
  在 com.vxceed.xnappexpresssync.comm.WebserviceCall.callServiceMethod(+112)
  在 com.vxceed.xnappexpresssync.utility.Generic.sendRequest(+22)
  在 com.vxceed.xnappexpresssync.main.Authentication.authenticateUser(+77)
  在 app.ui.ServerSync.sendServerRequest(+127)
  在 app.ui.LoginScreen.authenticateUser(+9)
  在 app.ui.LoginScreen.isLoginValidate(+76)
  在 app.ui.LoginScreen.keyPressed(+48)
  在 app.ui.MainAppScreen$Clean.run(+33)
  在 java.util.TimerThread.mainLoop(+237)
  在 java.util.TimerThread.run(+4)

I have created a J2ME app and added it as jar in another app. The original app runs with maximum permission and works fine, but when I add it as jar in the 2nd app, I get security exception while making a web service call, and I noticed the app is running in minimum security.

I have added the midlet permissions for http and https in the JAD as well.

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

Any idea on how to fix this? The error I get is as below:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

舟遥客 2025-01-11 06:48:08

正如 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 购买此类证书。

As Jonathan Knudsen states in "Understanding MIDP 2.0's Security Architecture":

The MIDP 2.0 specification defines an open-ended system of
permissions. To make any type of network connection, a MIDlet must
have an appropriate permission. For example, a MIDlet that uses HTTP
to talk to a server must have permission to open an HTTP connection.
The permissions defined in MIDP 2.0 correspond to network protocols,
but the architecture allows optional APIs to define their own
permissions.

Each permission has a unique name; the MIDP 2.0 permissions are:

  • 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

If you are using above APIs then your .Jar file must be signed with Proper Sign Certificates.

Check the article mentioned above for more detailed overview about Permissions.

You can buy such Certificate for example from Verisign.

不美如何 2025-01-11 06:48:08

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

问题出在模拟器上。当我使用 J2ME SDK 3.0 和 DefaultCldcPhone1 时,它工作得很好。

Posting the solution in case it helps someone.

The problem was with the emulator. When I used J2ME SDK 3.0, with the DefaultCldcPhone1 it worked fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文