Botdetect Captcha HTML <taglib>
Я хочу добавить Botdetect Captcha в мой HTML-файл. Но на веб-сайте Botdetect Captcha, есть пример только для jsp. В этом файле JSP, <taglib>
используется так:
<%@taglib prefix="botDetect" uri="https://captcha.com/java/jsp"%>
....
<botDetect:captcha id="basicExample" userInputID="captchaCode" />
<div class="validationDiv">
<input name="captchaCode" type="text" id="captchaCode" value="${basicExample.captchaCode}" />
<input type="submit" name="validateCaptchaButton" value="Validate" id="validateCaptchaButton" />
<span class="correct">${basicExample.captchaCorrect}</span>
<span class="incorrect">${basicExample.captchaIncorrect}</span>
</div>
Есть ли альтернатива <%@taglib>
в файлах HTML. Как я могу решить эту проблему?
2 ответа
Я столкнулся с этой проблемой, потому что я использую Thymeleaf вместо JSP, поэтому я не могу использовать taglib, но у меня все еще есть «динамический HTML». Я отвечаю, предполагая, что это ваш случай.
Я видел возможное решение на страницах справки здесь: https://captcha.com/doc/java/jsp-captcha.html в разделе 2:
<%
// Adding BotDetect Captcha to the page
Captcha captcha = Captcha.load(request, "exampleCaptcha");
captcha.setUserInputID("captchaCode");
String captchaHtml = captcha.getHtml();
out.write(captchaHtml);
%>
Это код JSP, но его легко адаптировать к Thymeleaf. Это в @Controller, который открывает страницу:
Captcha captcha = Captcha.load(request, "exampleCaptcha");
captcha.setUserInputID("captchaCode");
String captchaHtml = captcha.getHtml();
model.addAttribute("captchaHtml", captchaHtml);
и html такой
<th:block th:utext="${captchaHtml}"></th:block>
Код для проверки капчи такой же, как и для JSP, но помещен в @Controller, который обрабатывает форму:
// validate the Captcha to check we're not dealing with a bot
boolean isHuman = captcha.validate(request.getParameter("captchaCode"));
if (isHuman) {
// TODO: Captcha validation passed, perform protected action
} else {
// TODO: Captcha validation failed, show error message
}
Чтобы закончить, вам также необходимо отредактировать web.xml (если он у вас есть) и импортировать java-библиотеки, как в официальных документах. Я использую Gradle и импортирую «com.captcha:botdetect-servlet:4.0.beta3.7»
Предупреждение: ваш сервер должен быть на HTTPS, иначе вы можете получить эту ошибку при использовании версии 4.0.beta3.7:
Captcha.UserInputID не задан. Ваша реализация BotDetect еще не полностью безопасна
<%@taglib prefix="botDetect" uri="https://captcha.com/java/jsp"%>
....
<botDetect:captcha id="basicExample" userInputID="captchaCode" />
<div class="validationDiv">
<input name="captchaCode" type="text" id="captchaCode" value="${basicExample.captchaCode}" />
<input type="submit" name="validateCaptchaButton" value="Validate" id="validateCaptchaButton" />
<span class="correct">${basicExample.captchaCorrect}</span>
<span class="incorrect">${basicExample.captchaIncorrect}</span>
</div>
Это неправильно, с HTML (HyperText Markup Language) вы должны перечислить версию HTML, в данном случае это Doctype HTML, поэтому следующий код должен быть правильным...
<!DOCTYPE html>
<%@taglib prefix="botDetect" uri="https://captcha.com/java/jsp"%>
....
<botDetect:captcha id="basicExample" userInputID="captchaCode" />
<div class="validationDiv">
<input name="captchaCode" type="text" id="captchaCode" value="${basicExample.captchaCode}" />
<input type="submit" name="validateCaptchaButton" value="Validate" id="validateCaptchaButton" />
<span class="correct">${basicExample.captchaCorrect}</span>
<span class="incorrect">${basicExample.captchaIncorrect}</span>
</div>