我正在寻找替代JCaptcha的技术,因为它似乎已不再维护,并且一开始就不是很好。新技术需要与JavaEE Web应用程序良好集成。
在我看来,有三个选择:
- JCaptcha - 不再维护,API较为粗糙
- SimpleCaptcha - API更好,验证码更美观,但似乎仅支持Java6
- ReCaptcha - 使用简单,使用远程Web服务生成验证码,但外观上没有太多控制
是否有其他人使用过其他技术,并推荐使用?
我正在寻找替代JCaptcha的技术,因为它似乎已不再维护,并且一开始就不是很好。新技术需要与JavaEE Web应用程序良好集成。
在我看来,有三个选择:
是否有其他人使用过其他技术,并推荐使用?
我是SimpleCaptcha的作者。尽管出于人道主义考虑,我建议你尽可能使用ReCaptcha,但出于某些组织禁止使用ReCaptcha这样的库的政策,我提供了SimpleCaptcha。SimpleCaptcha旨在完全独立,没有外部依赖:只要您在J2EE容器中,就应该没问题。
此外,SimpleCaptcha现已提供Java 1.5或Java 6版本。
在reCAPTCHA如今变得如此流行之前,我创建了http://kaptcha.googlecode.com。它还提供了自主托管的功能,在某些情况下可能是必要的。
Kaptcha是SimpleCaptcha的大幅修改和更新版本,并支持JDK5/6。
com.google.code.kaptcha:kaptcha:jar
吗?我们的应用程序中有 ${basedir}/src/main/webapp/WEB-INF/lib/kaptcha-2.3.2.jar
,但我想用来自 Maven 中央仓库的版本来替换它。但是我在那里只能找到 com.github.penggle:kaptcha
2.3.3 版本。这是同一个吗? - Amedee Van GasseSimpleCaptcha非常好用且易于使用。
以下是一个JSF 2.0结合SimpleCaptcha的示例(主页上有一个JSP示例)。
请注意,我甚至不需要在bean中存储验证码值,仅需验证即可。
该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>
祝您愉快 :-)
Kaptcha是一个很好的替代方案,如果您想要托管自己的验证码服务而不是依赖于第三方验证码服务(如Recaptcha)。