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>
Другие вопросы по тегам