Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > applet security problem


Автор: SYS 7.5.2003, 15:05
У меня такой вопрос.
Я загруjаю апплет.
и функция getDocumentBase() вазврашает место апплетА на сервере.
может ли апплет читать из файла (.txt), который находится в том же каталоге?
И если ест jdk , как настраивать Netscape Comunicator, чтоб@ на открыл апплеты?




Автор: DarkDS 7.5.2003, 15:29
С сервера читать нужно? Или в месте, где аплет запущен?

Что ты имеешь ввиду под "как настраивать Netscape Comunicator, чтоб@ на открыл апплеты?" чтобы запускал их или чтобы открывал на редактирование?

Автор: SYS 7.5.2003, 15:38
net chtob@ zapuskal ix.

A txt fail nado otkr@t na servere, tam gde lejit i sam applet.

Автор: AntonSaburov 7.5.2003, 15:46
Цитата
и функция getDocumentBase() вазврашает место апплетА на сервере.
может ли апплет читать из файла (.txt), который находится в том же каталоге?


Просто читать файл через обычный ввод/вывод - невозможно.
Апплет ведь фактически запущен на локальной машине. А файл лежит на другой.
Для его скачивания надо обращаться к какой-либо службе на сервере, с которого взят апплет - FTP, или к тому же WEB-серверу по HTTP.

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

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

Иначе никак.

Автор: SYS 8.5.2003, 08:57
понятно.
но как это можно делать?
И если я скачаю этот файл в локальную файл систему, то как апплет может открыт этот файл?
Дело в том что, вопроз безопасности сдес стоит не на последном месте.
Например как через HTTP скачать содержaние этого файла сразу в апплет, не используя локальную файл систему.

Автор: AntonSaburov 8.5.2003, 11:47
Цитата
И если я скачаю этот файл в локальную файл систему, то как апплет может открыт этот файл?


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

Вообщем в обычной ситуации апплет ничего записать на диск не может.

Цитата
Например как через HTTP скачать содержaние этого файла сразу в апплет, не используя локальную файл систему


Открыть сокет прямо в апплете к тому же серверу. Во, нашел на форуме. Помню, чтоуже отвечал.

http://forum.vingrad.ru/index.php?act=ST&f=9&t=5302&unread=1&hl=туннел

Автор: SYS 9.5.2003, 11:55
u menaj Browser Netscape Comunicator
JDK 1.3.1_06
no kak soazdat " политика безопасности" ja n znaju.

Mojet pomojete?
A cherez URLconection, ja mogu otkr@vat etot txt fail, kotor@i naxodica tam ja, gde i applet?

Na primere ja chjo to ne ponjal.
Izvinite za takie lamerskie voopros@.

Автор: SmaLL 15.5.2003, 16:04
Цитата(SYS @ 9.5.2003, 12:55)
A cherez URLconection, ja mogu otkr@vat etot txt fail, kotor@i naxodica tam ja, gde i applet?

Можешь
Вот код из работающего апплета
Код
   public String LoadText(String fileName)
   {
       String s1 = "";
       try
       {
           try
           {
               URL url = new URL(getCodeBase(), fileName);
               URLConnection urlconnection = url.openConnection();
               if(urlconnection.getContentLength() > 0)
               {
                   java.io.InputStream inputstream = urlconnection.getInputStream();
                   BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream));
                   String s2 = bufferedreader.readLine();
                   s1 = s1.concat(s2);
                   for(; s2 != null; s2 = bufferedreader.readLine())
                       s1 = s1.concat(s2);

                   bufferedreader.close();
               }
           }
           catch(Exception _ex) { }
       }
       catch(SecurityException _ex) { }
       return s1;
   }

Автор: AntonSaburov 15.5.2003, 19:02
Политика безопасности настраивается очень просто/
Надо отредактировать файл (JAVA_JRE-каталог)\lib\secutiry\java.policy

Формат этого фала

grant [SignedBy "список имен"] [, CodeBase "URL"
{
permission имя_класса_права_доступа "имя" "действие" [, SignedBy "список имен"]
};
grant ...
{
};

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

Теперь по поводу имя_класса_права_доступа.
Это классы? которые фактически проверяют и дают доступ к ресурсам. Все они
наследники от класса Permission. Вот их и надо подставлять. Каждый из них
отвечает за свои права - так что тут уже надо брать документацию и смотреть.
Например для FilePermission надо указывать имя до файла (можно использовать *)
и модификаторы через запятую (read, write, delete).
Для SocketPermission - "connect", "listen", "accept"

Например:

grant CodeBase "http://www.trust.com/"
{
permission java.io.FilePermission "C:\\temp\\sample.txt", "read"
}

Если апплет загружен с сайта www.trust.com, то он может читать указанный файл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)