我正在寻找 JCaptcha 的替代品,它似乎不再被维护,而且一开始也不是很好。替代品必须与 JavaEE webapps 很好地集成。
如我所见,有三个选项:
- JCaptcha - 不再维护的原始 API
- SimpleCaptcha - 更好的 API,更好的验证码,但似乎只是 Java6
- ReCaptcha - 易于使用,使用远程 Web 服务生成验证码,但对外观和感觉没有太多控制
有没有人用过其他的,他们会推荐?
我正在寻找 JCaptcha 的替代品,它似乎不再被维护,而且一开始也不是很好。替代品必须与 JavaEE webapps 很好地集成。
如我所见,有三个选项:
有没有人用过其他的,他们会推荐?
我是SimpleCaptcha的作者。虽然我会推荐——为了人类的缘故——尽可能使用 ReCaptcha,但我提供了 SimpleCaptcha,因为一些组织有禁止像 ReCaptcha 这样的库的政策。SimpleCaptcha 是完全独立的,没有外部依赖项:只要您在 J2EE 容器中,就应该很好。
此外,SimpleCaptcha 现在可用于 Java 1.5 或 Java 6。
当 ReCaptcha 关闭/不可用时会发生什么?您的服务会停止吗?您是否只是在它关闭时停止注册?即使 ReCaptcha 没有运行,您是否允许用户注册?如果是这样,这对安全有什么影响?特别是如果您将 CAPTCHA 用于注册以外的用途,例如重置密码表单、登录表单……如果没有 CAPTCHA 组件,您将无法接受这些操作。
验证码的 Java 世界处于可悲的状态,对于我们这些无法接受托管服务的人来说,SimpleCaptcha 似乎是最好的解决方案。
在 recaptcha 变得像今天这样流行之前,我创建了http://kaptcha.googlecode.com 。它还使您能够自己托管它,这在某些情况下可能是必要的。
Kaptcha 是 SimpleCaptcha 的一个经过大量修改和更新的版本,支持 JDK5/6。
SimpleCaptcha 非常好用且易于使用。
这是一个如何在 JSF 2.0 中使用 SimpleCaptcha 的示例(主页有一个 JSP 示例)
请注意,我什至不费心将验证码值存储在 bean 中,我只是在验证它。
豆子:
// imports missing here
@ManagedBean
@SessionScoped
public class LoginBean implements Serializable
{
public void validateCaptcha(FacesContext context,
UIComponent componentToValidate,
Object value)
throws ValidatorException
{
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
Captcha secretcaptcha = (Captcha) session.getAttribute(Captcha.NAME);
if (secretcaptcha.isCorrect(value.toString()))
return;
// optional: clear field
((HtmlInputText) componentToValidate).setSubmittedValue("");
throw new ValidatorException(new FacesMessage("Captcha does not match"));
}
}
facelet的相关部分:
<h:form id="CaptchaForm">
Type this: <br/>
<h:graphicImage id="CaptchaImgID" value="/simpleCaptcha.png"/> <br/>
<h:inputText id="CaptchaID"
required="true"
requiredMessage="Captcha missing"
validator="#{loginBean.validateCaptcha}"
validatorMessage="Captcha does not match"
immediate="true">
</h:inputText>
<br/>
<h:commandButton value="Check"/>
<p/>
<!-- message for the input field -->
<h:message id="CaptchaMsgID" for="CaptchaID" style="color:red" />
</h:form>
web.xml 的相关部分:
<servlet>
<servlet-name>SimpleCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
<param-name>captcha-width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>captcha-height</param-name>
<param-value>75</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SimpleCaptcha</servlet-name>
<url-pattern>/simpleCaptcha.png</url-pattern>
</servlet-mapping>
享受 :-)
如果您希望托管自己的验证码服务而不是依赖第三方验证码服务(如 recaptcha),Kaptcha 是 Recaptcha 的一个很好的替代品。