Я хочу реализовать двойное предотвращение отправки в существующем веб-приложении на Java (фактически, Struts).В архитектуре мы говорим о 2 или N возможных серверах приложений (tomcat) и одном сервере баз данных (mysql).Отдельные серверы не знают друг друга и не могут обмениваться сообщениями.Перед серверами приложений находится один балансировщик нагрузки, который может выполнять липкие сеансы .
. Таким образом, в основном существует два вида защиты клиента от двойного представления и стороны сервера.Если возможно, я хочу перейти на серверную сторону, потому что все методы на стороне клиента, по-видимому, терпят неудачу, если люди отключают файлы cookie и / или javascript в своих браузерах.
Это оставляет меня с идеей сделать какую-то мьютекс-подобную синхронизациючерез блокировки базы данных.Я думаю, что можно рассчитать контрольную сумму введенных пользователем данных и сохранить их в отдельной таблице базы данных.При каждом представлении заявка должна проверять наличие одинаковой контрольной суммы, которая указывает на то, что данное представление является дубликатом.Конечно, контрольные суммы в этой таблице должны периодически очищаться.Проблема заключается в том, что весь процесс проверки наличия дублирующей контрольной суммы в базе данных и вставки контрольной суммы, если ее нет, в значительной степени критический раздел .Поэтому таблицу контрольных сумм необходимо предварительно заблокировать и снова разблокировать после раздела.
Мои тупик и горлышко бутылки Сигналы тревоги начинают звонить, когда я думаю о блокировках таблицы,Поэтому мой вопрос таков: существуют ли более разумные способы предотвращения двойной отправки в веб-приложениях без сохранения состояния?
Обратите внимание, что распорки TokenInterceptor
не могут быть применены здесь, потому что они терпят неудачу, когда файлы cookieотключен (он использует сеанс HTTP, который просто отсутствует без файлов cookie сеанса).