Интеграция капчи с Spring Security
Как правильно интегрировать SpringSecurity с Capcha?
У меня есть следующий вариант использования: Когда пользователь попытается войти в систему, если мы не смогли войти в систему N раз, будет отображаться капча, поэтому для аутентификации будут использоваться три параметра: имя пользователя, пароль, капча. Но Spring Security не поддерживает встроенную обработку капчи.
Я просто начинаю думать о реализации. И есть следующие варианты:
- Добавление отдельного фильтра безопасности в стек фильтров Spring Security,
- Полностью переписать AuthenticationProcessingFilter для поддержки некоторых каптч
- Использовать некоторую программную аутентификацию с использованием логики перехвата каптчи, а затем передавать имя пользователя и пароль в Spring Security.
Как реализация капчи, я думаю о JCaptcha, но каковы ваши мысли?
4 ответа
Взгляните на эту статью: Spring Security 3: Интеграция службы reCAPTCHA.
При этом используются два фильтра, чтобы сделать интеграцию reCAPTCHA максимально простой и ненавязчивой. Это означает, что ваша существующая реализация Spring Security не сломается. Не нужно трогать существующие классы
В качестве альтернативы использованию JCaptcha, если вы хотите использовать службу reCAPTCHA на своем сайте, ознакомьтесь с бесплатным разделом 4.4 ( прямая ссылка в формате PDF) новой книги Spring in Practice (в настоящее время находится в стадии бета-тестирования).
Это показывает вам интеграцию с Spring MVC и Spring Validation. Поскольку интеграция осуществляется с помощью внешнего интерфейса, с внешними API, Spring Security на самом деле здесь не вписывается.
Я не уверен, каков ваш вариант использования? Вы надеетесь использовать капчу как альтернативу аутентификации, чтобы доказать "человеческую" сущность?
Я сделал интеграцию с reCaptcha и Spring Security (Spring Web Flow + JSF), определив пользовательский фильтр безопасности. Может быть, это не самый элегантный, но работает хорошо. Вы можете посмотреть мой блог - к сожалению, на польском, но, возможно, поможет вам или кому-то...