Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Чтение сетевого файла


Автор: kamelopardus 2.2.2011, 11:02
Коллеги, помогите: одолел мозговой слизень.

Есть вот такой кусок кода:

Код

            System.out.println("fileName = " + fileName);
            in = getClass().getResourceAsStream(fileName);
            if(in != null){
                System.out.println("in = " + in.toString());
            } else {
                System.out.println("in = NULL");
            }


Вызываю его в первый раз при инициализации апплета. Получаю в консоли вот это:

fileName = http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes
network: Cache entry not found [url: http://mydomain/nes/, version: null]
network: Cache entry not found [url: http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes, version: null]
network: Connecting http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes with proxy=DIRECT
network: Connecting http://mydomain:80/ with proxy=DIRECT
network: Connecting http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes with cookie "ci_session=VWBWPFVnXGoKcFYkADxWZFJnVWgPJAR3AzEAJgl7VWYJZl01B1pXbgIyAHINMF0iUGsDMVtvBz5RdgtqCDMAY1VgU2IBZlc%2FXmYFZVUxXm
1VM1YwVTVcaAo9VjQAMVZsUmNVag9kBDYDbQAzCTBVaQltXWoHYFc1AmQAcg0wXSJQawMzW20HPlF2C2UIcQBfVWNTYgFkV39eOwVwVSReLFU6VnVVa
VxhCj9WbQAkVm1SZFV8DzQENwNjAHsJOVU%2FCTFddQc3VzICZQByDTBdIlBrAzNbbQc%2BUXYLeQhyAGVVcFNZAWFXal47BW1VI14sVTpWdVVpXGUK
O1ZtACRWGFI4VSgPbwRoAzgANAknVToJJ11rByVXLwIBADkNZV01UD4DdVsuBz9RdAtZCDoAIFVVU28BbldpXjEFdFUkXi5VT1ZSVXNcZgolVmYAPVZ1UiVVJ
w89BCQDJgAjCTJVPgknXXkHPld0AmwAYQ04XWtQcwNuWzwHd1EgC1MIYABjVXZTbwF2V2ReKgV6VXVeNVVyVjxVYlxgCjFWdQA3VmdSblVkDzMEPANjAG
AJMFU6CStdYAd4"
in = sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@d8e902


Вызываю второй раз. Получаю вот это:

fileName = http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes
network: Cache entry not found [url: http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes, version: null]
network: Connecting http://mydomain/roms/12dc9ff47235bba4b5b265d003ebd34f.nes with proxy=DIRECT
in = NULL

то есть открыть файл на чтение не получается.


Разница между вызовами минимальная: первый раз инициатором вызова кода является сам апплет, во втором вызов инициирует javascript через публичный метод апплета. Может быть, какие-то тонкости политики безопасности не дают открыть файл во втором случае? Кто-то может подсказать?

Автор: LSD 2.2.2011, 11:56
1. Если тебе нужно считать данные с веб сервера используй URL.opentConnection().
2. Методы вызываемые из JS действительно имеют ограничения с точки зрения безопасности. Они выполняются с правами не подписанного кода.

Автор: kamelopardus 2.2.2011, 12:01
LSD, спасибо за подсказки.

Применил вот такой финт: 
Код

java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() )


и все заработало.

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