HTTP-аутентификация JAVA

#java

#java

Вопрос:

Мне нужно знать, в чем проблема в следующем коде

 public class NewClass {

public static void main(String[] args) {
    try {
        while (true) {
            ServerSocket ss = new ServerSocket(7777);
            Socket c = ss.accept();

            BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
            DataOutputStream writer = new DataOutputStream(c.getOutputStream());
            String temp;

            // read browser Request
            while ((temp = reader.readLine()) != null) {
                System.out.println(temp);
            }

            // send basic authentication request
            String response = "WWW-Authenticate: Basic realm="test"n"; 
            respons  = "HTTP/1.1 401 Authorization Requiredn";
            writer.writeBytes(response );
            writer.flush();

            // receive browser response 
            while ((temp = reader.readLine()) != null) {
                System.out.println(temp);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}
  

когда я запрашиваю http://localhost:7777 в браузере диалоговое окно аутентификации не отображается

почему????

также я пытался отправить это

   String response = "HTTP/1.1 401 Authorization Requiredn";
                   response  = "WWW-Authenticate: Basic realm="test"n"; 
  

также я отправил полный ответ сервера и без каких-либо преимуществ

Ответ №1:

Reader.readLine() не вернет значение null, пока не достигнет EOF, поэтому вы блокируете чтение в первом цикле и никогда ничего не отправляете в браузер.

В первом цикле найдите пустую строку или null.

 while ((temp = reader.readLine()) != null) {
    if( temp.length() == 0 ) break;
    System.out.println(temp);
}
  

Комментарии:

1. Я изменил это, но в браузере не отображается диалоговое окно аутентификации

Ответ №2:

Это работает нормально

         String response = "WWW-Authenticate: Basic realm="test"rn"; 
        respons  = "HTTP/1.1 401 Authorization Requiredrnrn";
        writer.writeBytes(response );
        writer.flush();
  

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

в моем случае браузер запрашивает новый http-запрос.

Спасибо

Комментарии:

1. Это даже не компилируется… ответ <-> отвечает