Апплет со знаком throw: java.security.AccessControlException.Как я могу заставить его работать? - PullRequest
0 голосов
/ 06 июля 2010

После нескольких часов работы (я не программист java) мне удалось упаковать и поместить в апплет, который выполняет ftp-загрузку на удаленный сервер. Основной файл - "prova.class" внутри "invia.jar"; Я использую библиотеку третьей части, помещенную в "edtftpj.jar". Я подписал оба файла и включил их в страницу со следующим кодом:

Index.html

<applet width="300" height="300"  classpath="./" code="prova.class" archive="invio.jar,edtftpj.jar"> </applet>

Теперь, когда я указываю браузеру на свою страницу, я нашел это сообщение в консоли:

Could not read property 'edtftp.log.level' due to security permissions
Could not read property 'edtftp.log.log4j' due to security permissions
Could not read property 'edtftp.log.log4j' due to security permissions
java.security.AccessControlException: access denied (java.net.SocketPermission www.artkiller-web.com resolve)
 at java.security.AccessControlContext.checkPermission(Unknown Source)
 at java.security.AccessController.checkPermission(Unknown Source)
 at java.lang.SecurityManager.checkPermission(Unknown Source)
 at java.lang.SecurityManager.checkConnect(Unknown Source)
 at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
 at java.net.InetAddress.getAllByName0(Unknown Source)
 at java.net.InetAddress.getAllByName(Unknown Source)
 at java.net.InetAddress.getAllByName(Unknown Source)
 at java.net.InetAddress.getByName(Unknown Source)
 at com.enterprisedt.net.ftp.FTPClient.connect(FTPClient.java:966)
 at com.enterprisedt.net.ftp.FileTransferClient.connect(FileTransferClient.java:386)
 at prova.start(prova.java:44)
 at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)

Есть идеи, как это обойти?

заранее благодарю

ArtoAle

1 Ответ

1 голос
/ 12 июля 2010

Вам нужно заключить URL-адрес соединения в привилегированный блок кода.

Также похоже, что у вас есть проблемы с чтением из файла свойств, файл свойств, который вы можете упаковать прямо в вашем фляге кода, а также.

Вот блок кода, который я использовал в другом ответе для получения URL через контроллер доступа.

 try 
 {
     final String imageURL = "http://www.google.com/intl/en_ALL/images/logo.gif";
     URL url = (URL) AccessController.doPrivileged(new PrivilegedAction() 
     {

         public Object run() 
         {
             try
             {
               return new URL(imageURL);
             }
             catch (MalformedURLException e)
             {
               e.printStackTrace();
               return null;
             }

        }  
      });  

     if(url == null)
     {
        // Something is wrong notify the user
     }
     else
     {
        // We know the url is good so continue on
         img = ImageIO.read(url);
     }

  } 
  catch (IOException e) 
  {
   System.out.println(e);
  }  
...