Грешка: java.security.AccessControlException: Достъпът е отказан

Трябва да се свържа с https URL с потребителско име и парола, за да прочета файл. Не мога да се свържа със сървъра (вижте регистъра за грешки по-долу). Нямам много опит с Java, така че имам нужда от помощ с този код.

import lotus.domino.*;
import java.net.*;
import java.io.*;
import javax.net.ssl.HttpsURLConnection;

public class JavaAgent extends AgentBase {

public void NotesMain() {

  try {
    String username = "123";
    String password = "456";
    String input = username + ":" + password;
    String encoding = new sun.misc.BASE64Encoder().encode (input.getBytes());

    //Open the URL and read the text into a Buffer
    String urlName = "https://server.org/Export.mvc/GetMeetings?modifiedSince=4/9/2010";
    URL url = new URL(urlName);
    HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();

    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestProperty("Content-Length", String.valueOf (encoding.length())); 
    connection.setUseCaches(false);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setAllowUserInteraction(true);
    connection.setRequestProperty("Authorization", "Basic " + encoding);
    connection.setRequestProperty("Cookie", "LocationCode=Geneva");

    connection.connect();

    BufferedReader rd = null;
      try{
        rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      } catch (IOException e) {
        System.out.println("Read failed");
        System.exit(-1);
      }

    String line;
    while((line = rd.readLine()) != null) {
      System.out.println(line.toString());
    }
    rd.close();

    connection.disconnect();

  } catch(Exception e) {
    e.printStackTrace();
  }
}
}

Хвърлено изключение:

java.security.AccessControlException: Access denied (java.lang.RuntimePermission exitVM.-1)
 at java.security.AccessController.checkPermission(AccessController.java:108)
 at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
 at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.java:1311)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1611)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
 at java.lang.SecurityManager.checkExit(SecurityManager.java:744)
 at java.lang.Runtime.exit(Runtime.java:99)
 at java.lang.System.exit(System.java:275)
 at JavaAgent.NotesMain(Unknown Source)
 at lotus.domino.AgentBase.runNotes(Unknown Source)
 at lotus.domino.NotesThread.run(Unknown Source)

person RMD    schedule 14.04.2010    source източник


Отговори (4)


Стара тема, но попаднах на нея, така че ето актуализиран отговор.

Отговорът е във вашия stacktrace. въпреки че може да се отнася до използването на Domino, това е общ проблем, който би възникнал за доста прост аплет, използван на нормална JVM, извикана от стандартните плъгини на браузъра Java, и очевидно вашият Java Agent използва пясъчник на аплет.

На аплетите не е разрешено (освен чрез директно модифициране на политиката за сигурност на Java на клиентската машина) да извършват някои критични повиквания. Дори ако използвате подписани аплети.

Във вашия случай System.exit(-1) задейства изключението. Причината за това е, че аплетите имат доста сложен жизнен цикъл и не трябва да се забърквате с него. Това е за ваше добро, тъй като искате браузърът да може да взаимодейства с аплета вместо вас и да може да разруши (или използва повторно) JVM процеса, стартиран за изпълнение на аплета. Като извикате System.exit() или други, ще объркате този жизнен цикъл и шансовете на вашия браузър да контролира унищожаването на аплета.

Може да искате да обмислите отново защо имате нужда от това изцяло, тъй като вероятно не е необходимо да извиквате System.exit() повикване там.

person haylem    schedule 05.11.2012

Предполагам, че това е Java агент? Неща за проверка.

  1. В свойствата на агента нивото на защита е зададено за това, което искате да направите. Обикновено достъпът до файлове изисква поне ниво 2.

  2. Подписът на агента или потребителя, на когото агентът е настроен да работи, както е разрешено да работи на сървъра.

  3. Можете да промените файла java.policy, за да разрешите достъп до определени ограничени класове. (но трябва да знаете защо правите промяната).

http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html

person Sio    schedule 16.04.2010
comment
Зададох нивото на защита в агента на 3 и сега получавам това изключение: Причинено от: java.security.KeyStoreException: IBMKeyManager: Проблем с достъпа до хранилището на ключове java.security.cert.CertificateParsingException: java.io.IOException: subject key, java.security.spec.InvalidKeySpecException: Неизвестна ключова спецификация. на com.ibm.jsse2.ic.a(ic.java:16) на com.ibm.jsse2.kc.g(kc.java:4) на com.ibm.jsse2.kc.‹init›(kc.java :19) в java.lang.J9VMInternals.newInstanceImpl(Native Method) в java.lang.Class.newInstance(Class.java:1325) в java.security.Provider$Service.newInstance(Provider.java:880) - person RMD; 16.04.2010
comment
Това изглежда като нов проблем. Може би конфигурация на магазин за ключове? Не е област, с която съм играл. :/ - person Sio; 19.04.2010

Аплетът може да има достъп само до сървъра, от който е зареден. Най-вероятно вашият аплет не е зареден от сървъра, към който се опитвате да се свържете?

РЕДАКТИРАНЕ: Вашият stacktrace предполага, че има инсталиран специализиран мениджър за сигурност (COM.ibm.JEmpower.applet.AppletSecurity). Търсене в гугъл на този клас разкрива проблема: http://lekkimworld.com/2006/02/28/imported_java_agent.html

person Arne Deutsch    schedule 14.04.2010
comment
Domino използва този мениджър на сигурността, за да наложи своя собствен детайлизиран модел на сигурност с Java агенти. Звучи, както Sio намеква по-долу, че агентът не работи с подходящи разрешения. Например кодът на Java, който има достъп до отдалечен ресурс, се нуждае от ограничени права в света на Domino. - person Ben; 16.04.2010

Тази тема за поддръжка от IBM звучи подобно на вашият проблем, ако работите на 8.5 Domino сървър.

person angryITguy    schedule 19.04.2010