1

我想将 Botdetect Captcha 添加到我的 html 文件中。但是在 Botdetect 验证码的网站中,只有 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>

HTML文件中是否有任何替代方法<%@taglib>。我怎么解决这个问题?

4

2 回答 2

1

我正面临这个问题,因为我使用 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 实施尚不完全安全

于 2020-12-14T15:59:25.550 回答
-1
<%@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(超文本标记语言)你必须列出 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>
于 2019-05-19T02:16:23.180 回答