我在项目中使用JCaptcha,需要一种无法直接使用的行为。所以我查看了源代码,看看我是否可以扩展它以获得我想要的东西,并发现我使用的商店实现(MapCaptchaStore)使用HashMap作为存储...没有同步。
我知道JCaptcha在群集环境中不起作用,不是我的情况,但同时多个客户端怎么样?商店实现是在外部同步还是应该自己滚动并确保它已正确同步?
TIA!
答案 0 :(得分:1)
根据MapCaptchaStore的读取源判断,此类不是线程安全的。我并不是100%愿意支持这个答案,因为同步可能发生在更高的层次上(例如,对单个MapCaptchaStore实例的所有访问都可能在另一个对象上同步)。
您可以使用CaptchaStore的另一个实现。例如,EhcacheCaptchaStore
答案 1 :(得分:1)
验证码存储的基本hashmap实现未同步,这可能会导致一些奇怪的行为。 其他商店是线程安全的,对于使用FastHashMapCaptchaStore的简单实现。
答案 2 :(得分:0)
我认为这是因为它被设计为与将始终拥有多个客户端的Web应用程序集成。它也是一个CAPTCHA框架,因此它们必须经过人机和计算机客户端的测试。
但是,我仍然建议测试它是否在多线程环境中正常运行。