type
является ключевым словом (псевдоним типа) и не должно использоваться в качестве имени переменной onComplete()
для Future
ожидания результата. Для этого мы можем определить заполнитель в getFoos()
- var fs: Seq[Foo] = Nil
. В будущее мы добавляем onComplete(tfr => fs = tfr.get.foos)
, а затем ждем некоторое время: Await.result(f, Duration(5000, "millis"))
(до 5 с в этом примере). Наконец, мы можем вернуть то, что находится в нашем заполнителе. Это должно сделать работу:
def getFoos(): Seq[Foo] = {
var fs: Seq[Foo] = Nil
val req = HttpRequest(method = HttpMethods.GET)
.withUri(Uri("/api/foo")).withHeaders(headers.Accept(MediaRange(MediaTypes.`application/json`)))
val f = Source
.single(req)
.via(flow)
.map(response => Unmarshal(response.entity).to[FooResponse])
f.onComplete(tfr => fs = tfr.get.foos)
Await.result(f, Duration(5000, "millis"))
fs
}
Каждые данные отправили канавку, http соединение видно кому-то в Вашем маршруте к серверу (человек в среднем нападении).
введите =, "пароль" только скрывает символ на экране, и даже другие программы на Вашем компьютере могут считать данные.
Единственный способ защитить данные состоит в том, чтобы отправить ему канавку SSL (HTTPS вместо HTTP)
введите =, "пароль" только скрывает символ на экране. Если Вы хотите прекратить осуществлять сниффинг, необходимо зашифровать соединение (т.е. HTTPS).
Можно или зашифровать HTTP-соединение через HTTPS, или существует MD5 и другие алгоритмы хеширования, реализованные в JavaScript, который может быть используемой стороной клиента для хеширования стороны клиента пароля прежде, чем отправить его, следовательно остановив способность сниффера считать пароль.
Да, Ваши учетные данные передаются в открытом тексте, любой, кто может услышать, что Ваш сетевой трафик может осуществить сниффинг их.
Содержимое тела POST видимо, т.е. "в ясном", если транспортируется на незашифрованном канале. Если Вы хотите защитить Тело HTTP от того, чтобы быть сниффинговым, необходимо сделать так по безопасному каналу через HTTPS.