#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. Это даже не компилируется… ответ <-> отвечает