J2ME: установить разрешение безопасности программно - PullRequest
0 голосов
/ 10 февраля 2012

Я создал приложение J2ME и добавил его как jar в другое приложение.Исходное приложение работает с максимальным разрешением и работает нормально, но когда я добавляю его как jar во 2-е приложение, я получаю исключение безопасности при вызове веб-службы и замечаю, что приложение работает в режиме минимальной безопасности.* Я добавил разрешения мидлета для http и https в JAD.

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 ]

2 голосов
/ 17 февраля 2012

Как утверждает Джонатан Кнудсен в «Понимание архитектуры безопасности MIDP 2.0» :

Спецификация MIDP 2.0 определяет открытую систему разрешений.Для создания любого типа сетевого подключения мидлет должен иметь соответствующее разрешение.Например, мидлет, который использует HTTP для связи с сервером, должен иметь разрешение на открытие 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
  • *

    Если вы используете указанные выше API, ваш файл .Jar должен быть подписан соответствующими сертификатами.

    Проверьте статью , упомянутую выше , для более подробного обзора разрешений.

    Такой сертификат можно купить, например, у Verisign .

1 голос
/ 27 февраля 2012

Размещение решения на случай, если оно кому-нибудь поможет.

Проблема была с эмулятором. Когда я использовал J2ME SDK 3.0, с DefaultCldcPhone1 все работало нормально.

...