Загрузка файла из Java с использованием HTTP-соединения - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь загрузить файл (файл журнала) из апплета, запущенного в браузере. Я читаю файл в строке. Следующая функция с данными String и URL-адресом строки (например: http://192.168.0.166:8380/app/customer/UploadData.do), загружает данные в URL-адрес. Поскольку после тайм-аута сеанс с сервером теряется. Поэтому я добавляю имя пользователя и пароль с URL-адресом , чтобы избежать любой проблемы с истечением срока действия сессии (так как эта загрузка должна быть автоматической, без какого-либо ручного ввода и т. д.) URL (не общедоступный) выглядит примерно так:

http://192.168.0.166:8380/app/customer/UploadData.do?username=uname&password=pword

public static void sendData(String aData, String aURL) throws Exception {
    try {
        byte[] myData = aData.getBytes();
        /* Uploading the data */
        URL myURL = new URL(aURL);
        HttpURLConnection myConnection = (HttpURLConnection) myURL.openConnection();
        myConnection.setDoOutput(true);
        myConnection.setUseCaches(false);
        myConnection.setDefaultUseCaches(false);
        myConnection.setRequestProperty("Content-type", "application/octet-stream");
        OutputStream myOutputStream = myConnection.getOutputStream();
        myOutputStream.write(myData);
        myOutputStream.flush();
        myOutputStream.close();

        int status = ((HttpURLConnection) myConnection).getResponseCode();

    } catch (Exception exception) {
        throw exception
    }
}

Эта функция работает абсолютно нормально, пока сеанс с сервером активен. Он не работает, например, когда сеанс истек или пользователь вышел из системы (апплет работает 24/7). Обратите внимание, что приведенный выше URL работает нормально при доступе через веб-браузер. Это этот Java-код (апплет), который не может подключиться снова, когда сеанс истекает. Было бы очень полезно, если бы кто-нибудь мог указать, что я здесь делаю неправильно. Любая помощь будет высоко оценена.

Среда: Jboss в качестве сервера приложений и JBoss Secured Realm для входа в систему.

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

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

Вам следует использовать метод Basic Authentication при подключении к серверу из программы cilent.Это можно сделать, добавив заголовок Authorization в запрос на загрузку, и сервер проанализирует его, чтобы получить имя пользователя и пароль.Это немного безопаснее, чем указывать имя пользователя и пароль в вашем URL.Существуют и другие способы аутентификации, и вы можете захотеть взглянуть.

1 голос
/ 29 ноября 2011

Принимает ли запрашиваемая веб-страница вход в систему и создает новый сеанс на основе отправленного вами имени пользователя / пароля?

Если пользователь входит на веб-сайт с помощью стандартных методов (например, страницы входа, на которой они вводят свои данные в браузере), он создает файл cookie, который отправляется туда и обратно, идентифицируя его как 'владелец этой сессии и аутентификация их (до истечения времени ожидания).Если они затем запустят ваш апплет, то ваш апплет завершит поддержку этого сеанса и cookie до истечения срока его действия.

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

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

Если одно из простых решений может заключаться в том, чтобы ваш апплет просто запросилвеб-сайт регулярно (один раз в час или 20 минут), чтобы предотвратить тайм-аут сеанса.Он не обязательно должен загружаться - он может запрашивать любую запрещенную страницу.

0 голосов
/ 29 ноября 2011

Может помочь HttpClient: HTTP PUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...