2010-11-16 4 views
3

Я использую JCaptcha в проекте и нуждаюсь в поведении, которое не было доступно напрямую. поэтому я просмотрел исходный код, чтобы узнать, могу ли я расширить его, чтобы получить то, что хочу, и нашел, что реализация хранилища, которую я использую (MapCaptchaStore), использует HashMap в качестве хранилища ... без синхронизации.Безопасен ли поток jCaptcha?

Я знаю, что JCaptcha не работает в кластерной среде, это не мое дело, но как насчет нескольких клиентов одновременно? Является ли реализация хранилища синхронизирована извне или я должен рулон самостоятельно и убедиться, что он правильно синхронизирован?

TIA!

ответ

0

Я предполагаю, что он создан для интеграции с веб-приложениями, которые всегда будут иметь несколько клиентов. Это также структура CAPTCHA, поэтому они должны быть протестированы как с человеческими, так и с компьютерными клиентами.

Однако я по-прежнему рекомендую проверить правильность поведения в многопоточной среде.

+2

«Проверка правильности поведения в многопоточной среде» является одной из великих нерешенных задач тестирования! –

1

Судя по источнику чтения для MapCaptchaStore, этот класс НЕ является потокобезопасным. Я не на 100% согласен с этим отвечать, потому что синхронизация может происходить на более высоком уровне (например, все обращения к одному экземпляру MapCaptchaStore могут быть синхронизированы на другом объекте).

Вы можете использовать другую реализацию CaptchaStore. Например, EhcacheCaptchaStore

1

Основная реализация hashmap хранилища captcha не синхронизирована, что может привести к некоторому странному поведению. Другие магазины потокобезопасны, для простой реализации используйте FastHashMapCaptchaStore.

Смежные вопросы