/captcha-service

Server with generating captcha pictures

Primary LanguageJavaMIT LicenseMIT

CAPTCHA сервис

Общая информация

Текущий проект -- это веб-сервер с автогенерирующейся валидацией CAPTCHA.

Как собрать проект

Чтобы собрать проект, напишите следующее в вашем терминале:

$ cd captcha-server
$ mvn package

Это сгенерирует jar файл в target директории.

Запуск веб-сервера

$ java -jar -Dproduction=[true/false] server.jar <ttl> 
  1. -Dproduction=[true/false] -- режим работы сервера. Если он равен false, тогда сервер будет отдавать ответ на CAPTCHA после генерации, и наоборот.
  2. ttl is a time limit in seconds for an answer.

Таким образом, обычный запуск выглядит следующим образом:

$ mvn package && java -jar -Dproduction=false target/captcha-server-0.0.1-SNAPSHOT.jar 10

После исполнения команды, идите на localhost:8080/client/register, чтобы зарегистрировать клиента.

Описание решения

Сервер написан с использованием фреймворка Spring.

Обработка реквестов

После того как реквест придёт на веб сервер, он передаёт его в нужный контроллер, который затем передаёт реквест в необхдимый обработчик реквестов: ClientRequestHandler или CaptchaRequestHandler. Разделение хендлеров на CAPTCHA и клиентов даёт удобный интерфейс для расширения функциональности обработки реквестов как для CAPTCHA, так и для клиентов.

У CaptchaRequestHandler есть мап соответствий между клиентом, запросившим капчу и самой капчой. Соответственно, при принятии ответа от клиента, капча удаляется из памяти -- это даёт невозможность ответить два раза на одну и ту же капчу.

Создание клиентов и капча

Реализована фабрика для создания капча и клиентов: CaptchaFactory и ClientFactory, обе расширяют AbstractFactory, имея возможность создавать объекты и удалять их.

Генерация капчи

Выделена абстракция генерации картинок (Image объектов) -- AbstractImageGenerator. Эта абстракция позволяет легко добавлять различные генераторы картинок: текстовые, картинки облаков, картинки животных и т.д., необходимо только реализовать методы drawImage и generateImage. После генерации текстовой картинки для капчи, к ней применяется фильтр, который добавляет шум для усложнения прочтения.

Общие слова

Таким образом, когда приходит запрос на генерацию капчи, с помощью фабрики генерируется сама капча, поддерживается соответствие клиента и капчи на уровне обработчика реквестов. Сама же картинка для капчи генерируется TextImageGenerator, который генерирует картинки с рандомными надписями на них. После этого применяется шум и картинка сохраняется в классе Captcha.