2012-02-10 82 views
0

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

我已经在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) 
+0

是您的原始应用程序签名? – 2012-02-14 04:57:33

+0

不,但第二个应用程序是在netbeans中创建的,奇怪的是,当我添加在eclipse中创建的jar并在NetBeans中运行它时,eclipse发出此错误时它工作正常。 – Mal 2012-02-16 10:03:21

回答

1

发布解决方案以防万一。

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

2

乔纳森克努森国"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.datagramrec eiver
  • javax.microedition.io.Connector.comm
  • javax.microedition.io.PushRegistry

如果您使用了以上的API那么你的.jar文件必须以正确的登录证书进行签名。

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

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

+0

是的,我已经添加了所有权限,但尚未签名。将尝试获得证书,但我仍然想知道它如何在netbeans上工作,但是当我在eclipse中重新创建相同的项目时,它失败了。 – Mal 2012-02-19 05:56:13

+0

好吧,你的netbeans可能已经在那里登录了认证。请向您的团队负责人或项目经理询问。 – Android 2012-02-19 06:01:17

+0

如果您要复制其他人的单词,请提供适当的归属。我已经在这里完成了,但确保你自己在将来做到这一点。 – 2012-05-24 20:36:31