我正在使用 Wicket 的CaptchaImageResource来保护提交表单免受机器人攻击。它在我使用 Jetty 服务器的测试环境(Mac)以及部署到本地 Tomcat 实例时都可以正常工作。
但是,当应用程序部署到远程 Linux 服务器上的 Tomcat 7 时,验证码图像无法呈现。相反,我得到一个零字节的响应。以下是curl -v
图像 URL 的返回结果:
HTTP/1.1 200 OK
Date: Thu, 28 Jul 2011 14:28:22 GMT
Set-Cookie: JSESSIONID=6D37183A1FF2C3F43C35B49433A0FC1B; Path=/; HttpOnly
Cache-Control: no-cache, must-revalidate
Content-Type: image/png
Content-Length: 0
Connection: close
* Closing connection #0
我的第一直觉是 Tomcat 需要与-Djava.awt.headless=true
. 我设置了它,并验证ps
它实际上是使用该选项运行的,但验证码仍然无法呈现。
我在 Tomcat 的日志中看不到任何错误消息或警告。我什至启用了远程调试,并在CaptchaImageResource.render()
. 它正在进入该方法,但我从未看到它返回;在第 291 行附近的某个地方,它只是神秘地停止了我的断点。
服务器 JVM 是java-1.6.0-openjdk.x86_64
. JVM 不能以无头模式呈现 AWT 图形有什么原因吗?