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

时间:2012-02-10 10:19:02

标签: java-me midp ksoap

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

2 个答案:

答案 0 :(得分:2)

Jonathan Knudsen在"Understanding MIDP 2.0's Security Architecture"中说:

  

MIDP 2.0规范定义了一个开放式系统   权限。要进行任何类型的网络连接,MIDlet必须   有适当的许可。例如,使用HTTP的MIDlet   与服务器通信必须具有打开HTTP连接的权限。   MIDP 2.0中定义的权限对应于网络协议,   但该架构允许可选的API定义自己的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购买此类证书。

答案 1 :(得分:1)

发布解决方案,以防有人帮助。

问题在于模拟器。当我使用J2ME SDK 3.0时,使用DefaultCldcPhone1它运行正常。