2015-03-18 8 views
0

Мы пытаемся, чтобы получить число файлов из каталога, используя следующий код:AccessControlException в doPriveledge

File dataDir = new File(dataHome); 
      final File privdataDir = dataDir; 
      System.out.println("The datadir is : \n"+dataDir+"The privdataDir is : \n"+privdataDir); 
      int count = 0; 
      final int[] privcount = {0}; 


      if (privdataDir != null) { 
       System.out.println("Going into doPriveledge block"); 
      AccessController.doPrivileged(new PrivilegedAction() { 
       public Object run() 
       { 

        privcount[0] = privdataDir.list().length; 
        return null; 

       } 
      }); 
      } 

      count = privcount[0]; 
      System.out.println("The count is : "+count); 

Переменная DATADIR относится к пути: C: \ MyApp \ Config Он бросает AccessControlException на следующую строку в коде:

privcount[0] = privdataDir.list().length; 

исключение составляет:

[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0862 GMT: SmartlinkThread: Error processing agg interval: java.security.AccessControlException: Access denied (java.io.FilePermission C:\MyApp\config read) <AggIntervalTaskThread> 
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0862 GMT: java.security.AccessControlException: Access denied (java.io.FilePermission C:\MyApp\config read) <AggIntervalTaskThread> 
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT: at java.security.AccessController.checkPermission(AccessController.java:132) <AggIntervalTaskThread> 
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT: at java.lang.SecurityManager.checkPermission(SecurityManager.java:544) <AggIntervalTaskThread> 
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT: at java.lang.SecurityManager.checkRead(SecurityManager.java:883) <AggIntervalTaskThread> 
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT: at java.io.File.list(File.java:982) <AggIntervalTaskThread> 

Ниже уже был добавлен в файл java.policy и файл server.policy

grant codeBase "file:C:/MyApp/-" { 
permission java.security.AllPermission; 
};    

Этот код уже выполняется для IBM Websphere 8.0.x. В другой части того же приложения, он дает ту же ошибку при чтении файла. Мы не можем понять, почему код дает эту ошибку, даже если все разрешения уже предоставлены ему. Любая помощь будет оценена по достоинству.

ответ

0

проводки, что работал для меня.

Наше полное приложение не развертывается на Websphere. Только часть его кода интегрируется с Websphere и собирает некоторые релевантные данные. Мы полагаем, что некоторые другие веб-приложения, которые были развернуты на Websphere, возможно, включали Java 2 Security. Добавлено следующее заявление в server.policy и java.policy файлов:

grant{ 
permission java.security.AllPermission; 
}; 

Пожалуйста, обратите внимание, что это дает разрешение на все, чтобы сделать что-нибудь в Websphere.

+0

Вот почему я предложил добавить его в нужное приложение через файл was.policy, а не открыть его для всего сервера .. – Gas

0

Я предполагаю, что у вас есть веб-приложение, которое вы развертываете в WebSphere, и у вас включена защита Java 2.

Вы должны создать в файле EAR/META-INF/was.policy, со следующим содержанием (ваш codeBase неверно):

grant codeBase "file:${application}" { 
    permission java.security.AllPermission; 
}; 

Если вы сделали это правильно, этот файл должен отображаться во время установки с помощью веб-консоли.

Для получения более подробной информации о создании файлов политики для WebSphere приложений проверить Configuring the was.policy file for Java 2 security

+0

Безопасность Java 2 отключена. – monvic

+0

@monvic Если защита Java 2 отключена, вы не должны иметь эти ошибки. Являются ли они из 'SystemOut.log', поскольку формат выглядит странно. Вы можете установить настраиваемое свойство 'com.ibm.websphere.java2secman.norethrow = tue' JVM только для регистрации таких исключений, чтобы узнать, какие привилегии необходимы. – Gas

 Смежные вопросы

  • Нет связанных вопросов^_^