目前我正在努力解决Sun班级java.net.Authenticator
中的一个错误。似乎Authenticator
类具有系统范围的静态Authenticator
。这导致我的多线程应用程序出现以下问题。
此时,系统将获取用户2的消息,而不是用户1的消息。
我试过寻找解决方案。许多人建议尝试以下代码:
AuthCacheValue.setAuthCache(new AuthCacheImpl());
Authenticator.setDefault(exchangeAuthenticator);
但是,这对我不起作用,因为我的应用程序是多线程的(exchangeAuthenticator
将始终设置为在最新线程中初始化的身份验证器。)
如果有人有任何想法,即使是黑客目前也会这样做,我真的很感激,因为目前唯一的“整洁”解决方案是在主执行方法上放置synchronized
对表现的戏剧性影响。
答案 0 :(得分:7)
根据我的经验,最好的办法就是放弃内置的http支持并获取Apache's HttpClient。
如果这不是一个选项,请创建一个扩展Authenticator的单个对象,但将用户名和密码存储在ThreadLocal个实例中。这样每个线程都可以检索它自己的值。