Разъем подключения к серверу Springboot в Java 8 - PullRequest
0 голосов
/ 04 мая 2018

У нас есть старое приложение, созданное с использованием Java 6. Оно связывается через сокеты, используя DataInputStream и DataOutputStream.

// Фрагмент кода для записи в поток

public void writeMessage(DataOutputStream out) throws IOException {
    int pageSize = 10;  
    logger.info("pageSize: " + pageSize);
    out.writeInt(pageSize);
}

// Фрагмент кода для чтения из потока

public void readMessage(DataInputStream in) throws IOException {
    int pageSize = in.readInt();    
    logger.info("pageSize: " + pageSize);
}

Раньше он работал в jboss как сервер приложений с postgres в качестве БД. Теперь мы перенесли приложение в Springboot. Он использует встроенный сервер Tomcat и ту же базу данных postgres.

Код не правильно читает из потока. Я получаю java.io.EOFException, когда звоню in.readInt()

Примечание. Мы используем SSL / TLSv1, и сертификаты и хранилища ключей настроены правильно. Нет никаких исключений, когда соединение с сокетом установлено и когда я пишу в поток. Кроме того, все соединения Streams / Socket были закрыты должным образом, и тот же код прекрасно работает на сервере jboss.

РЕДАКТИРОВАТЬ: я пытался использовать InputStream или BufferedInputStream вместо DataInputStream, и результаты еще более запутанные.

Допустим, я отправляю 20 байтов в поток: При inputStream.read считывается только 1 байт, и он достигает EOF преждевременно. С bufferedInputStream.read 19 байтов считываются и 1 байт пропущен.

Я использую inputStream ИЛИ bufferedInputStream, а не один за другим.

Пожалуйста, дайте мне знать, если я что-то упускаю.

1 Ответ

0 голосов
/ 22 июня 2018

Мы разобрались с решением. Кажется, что Java изменила безопасность jsse после 1.6

Решением было добавить свойство

-Djsse.enableCBCProtection = ложь

Нечто подобное упоминается здесь , где люди сталкивались с проблемами с соединением SQL и предлагали либо изменить версии Java, либо добавить это свойство.

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