Wicket CaptchaImageResource создает изображения нулевой длины на сервере Linux - PullRequest
3 голосов
/ 28 июля 2011

Я использую CaptchaImageResource от Wicket для защиты формы отправки от ботов.Он отлично работает в моей тестовой среде (Mac) с использованием сервера Jetty, а также при развертывании на локальном экземпляре Tomcat.

Но образ Captcha не отображается при развертывании приложения в Tomcat 7 наудаленный сервер Linux.Вместо этого я получаю нулевой ответ.Вот что 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 в режиме без головы?

1 Ответ

4 голосов
/ 29 июля 2011

Ах, Бизиклоп привел меня в правильном направлении.Я написал этот быстрый автономный (т.е. без Tomcat) тест:

public static void main(String[] args) throws Exception
{
    CaptchaImageResource resource = new CaptchaImageResource();
    int avail = resource.getResourceStream().getInputStream().available();
    System.out.println("avail: " + avail);
}

, который привел к следующей ошибке:

Probable fatal error:No fonts found.

Некоторое поиск в Google в этой строке заставил меня установить следующие пакеты:

yum install bitmap*
yum install dejavu-lgc*
yum install bitstream-vera*

И теперь это работает.

...