J2ME:以编程方式设置安全权限
我创建了一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 Jonathan Knudsen 在 “了解 MIDP 2.0 的安全架构”中所述“:
如果您使用上述 API,则您的 .Jar 文件必须使用正确的签名证书进行签名。
有关更详细的概述,请查看上述文章关于权限。
您可以从 Verisign 购买此类证书。
As Jonathan Knudsen states in "Understanding MIDP 2.0's Security Architecture":
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.
发布解决方案以防它对某人有帮助。
问题出在模拟器上。当我使用 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.