Как выполнить привязку SSL через самоподписанные подписанные сертификаты во флаттерах?

Строки в Java неизменяемы. Это означает, что всякий раз, когда вы пытаетесь изменить / изменить строку, вы получаете новый экземпляр. Вы не можете изменить исходную строку. Это сделано для того, чтобы эти экземпляры строк могли кэшироваться. Типичная программа содержит множество ссылок на строки и кеширование этих экземпляров, что может уменьшить объем памяти и увеличить производительность программы.

При использовании оператора == для сравнения строк вы не сравниваете содержимое строки , но фактически сравнивают адрес памяти. Если они равны, в противном случае они вернут true и false. Если значение равно в строке, сравнивает содержимое строки.

Итак, вопрос в том, что все строки кэшируются в системе, как получается == возвращает false, тогда как equals возвращает true? Ну, это возможно. Если вы создадите новую строку, например String str = new String("Testing"), вы создадите новую строку в кеше, даже если в кеше уже содержится строка с тем же содержимым. Короче говоря, "MyString" == new String("MyString") всегда будет возвращать false.

Java также говорит о функции intern (), которая может использоваться в строке, чтобы сделать ее частью кеша, поэтому "MyString" == new String("MyString").intern() вернет true.

Примечание: == оператор намного быстрее, чем равен только потому, что вы сравниваете два адреса памяти, но вы должны быть уверены, что код не создает новые экземпляры String в коде. В противном случае вы столкнетесь с ошибками.

0
задан Ankit Shukla 13 July 2018 в 11:00
поделиться

1 ответ

В вопросе недостаточно подробностей, поэтому этот ответ основан на некоторых предположениях:

  1. Ваши API-интерфейсы - HTTPS
  2. Вы говорите об утверждении сервера
  3. Вы используете package:http в качестве http-клиента
  4. Нет сертификатов на стороне клиента

package:http использует dart:io HttpClient под капотом, а HttpClient имеет несколько функций, позволяющих проверять сертификат. Поскольку сертификат самозаверяющего сервера будет не доверен клиенту, клиент будет вызывать badCertificateCallback, позволяя вам самостоятельно проверить сертификат сервера, например:

HttpClient httpClient = new HttpClient()
  ..badCertificateCallback =
  ((X509Certificate cert, String host, int port) {
    // tests that cert is self signed, correct subject and correct date(s) 
    return (cert.issuer == cert.subject &&
        cert.subject == 'MySelfSignedCertCN' &&
        cert.endValidity.millisecondsSinceEpoch == 1234567890);
  });

IOClient ioClient = new IOClient(httpClient);
// use ioClient to perform get/post operations from package:http

// don't forget to call ioClient.close() when done
// note, this also closes the underlying HttpClient
2
ответ дан Richard Heap 17 August 2018 в 13:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: