Обход встроенной проверки подлинности браузера при выполнении HTTP-вызовов из встроенного апплета - PullRequest
2 голосов
/ 02 марта 2010
  • У меня есть простая веб-страница со встроенным Java-апплетом.
  • Апплет выполняет HTTP-вызовы на разные камеры Axis, которые имеют одинаковую аутентификацию (например, имя пользователя, пароль).
  • Я передаю имя пользователя и пароль в код Java после запускаапплет - без проблем.
  • Когда я запускаю из NetBeans с помощью средства просмотра апплетов, я получаю полный доступ к камерам и вижу потоковое видео - точно так, как рекламируется.
  • Проблема начинается, когда я открываюHTML-страница в веб-браузере (Firefox).
  • Несмотря на то, что мой код обрабатывает аутентификацию:

    URL u = new URL(useMJPGStream ? mjpgURL : jpgURL);
    huc = (HttpURLConnection) u.openConnection();
    
    
    String base64authorization = 
        securityMan.getAlias(this.securityAlias).getBase64authorization();
    // if authorization is required set up the connection with the encoded 
    // authorization-information
    if(base64authorization != null)
    {
        huc.setDoInput(true);
        huc.setRequestProperty("Authorization",base64authorization);
        huc.connect();
    }
    
    InputStream is = huc.getInputStream();
    connected = true;
    BufferedInputStream bis = new BufferedInputStream(is);
    dis= new DataInputStream(bis);
    
  • Браузер по-прежнему вызывает всплывающее окно аутентификации изапрашивает имя пользователя и пароль для каждой камеры отдельно!
  • Что еще хуже, изображения, отображаемые с камеры, заморожены и устарели (с прошлой ночи).
  • Как я могу обойти аутентификацию браузера?

Ответы [ 2 ]

0 голосов
/ 02 марта 2010

При работе в браузере base64authorization не ноль, правильно?

Я не совсем уверен, что должен возвращать getBase64authorization, но я совершенно уверен, что когда вы вызываете huc.setRequestProperty("Authorization", **autorization value**), он ищет значение проверки подлинности HTTP Basic. Значение **authorization value** должно быть в формате Basic **base 64 encoding of username:password**, как описано здесь .

Может быть, вам просто нужно добавить строку Basic (обратите внимание на конечный пробел) в вашу собственность.

0 голосов
/ 02 марта 2010

Fixed

Я добавил следующие строки:

huc.setDoOuput(true);
huc.setUseCaches(false);

после

huc.setDoInput(true);

линия.

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