Skip to content

Struts2 Captcha

体华 edited this page Dec 30, 2013 · 7 revisions

如何使用beangle-struts2-captcha。

可以使用该包为应用增加验证码,它提供了三个方面的支持。

内容介绍

CaptchaProvider

验证码的提供者,目前该包中在spring的bind中提供了两个实现。

public interface CaptchaProvider {
  /**
   * 生成验证字节流
   * @param request
   * @return null if non local provider.
   */
  ByteArrayOutputStream generater(HttpServletRequest request);
  /**
   * 验证用户输入
   * @param request
   * @param response
   * @return
   */
  boolean verify(HttpServletRequest request,String response);
}
  • RecaptchaProvider 它采用了google的recaptcha api,提供了在线验证码。
  • JcaptchaImageProvider 它利用jcaptcha生成本地文件,提供图像流。

使用这些代码的client(例如包中的ImageAction)可以,注入一个CaptchaProvider,使用其中的generate方法生成图片。负责验证验证码的action(例如LoginAction),只需要将客户的输入(response)作为第二个参数传递进来即可。

ImageAction

该action是基于provider提供在线图片的辅助方法,已经在struts-plugin中进行了配置,访问路径为/captcha/image。有权限过滤的系统中 需要额外注册。

tag

用户输入的验证码的name默认为captcha_response,可以自行更改(注意调整相应的验证代码中,获取用户输入的地方)

  • @captcha.image

    该标签生成一个input和一个图片。 样例如:

    [@captcha.image name="captcha_response" provider=captchaProvider
      inputStyle="width:45px;height:16px" 
      imageStyle="width:70px; height:22px;cursor: pointer;vertical-align:top;"/]
  • [@captcha.recaptcha

    该标签使用google的recaptcha api. 样例如:

[@captcha.recaptcha theming="onlyimage" provider=captchaProvider/]

如何使用

使得项目直接或间接依赖beangle-struts2-captcha包。如 在项目的pom.xml中加入

<dependency>
  <groupId>org.beangle.struts2</groupId>
  <artifactId>beangle-struts2-captcha</artifactId>
  <version>3.4.5</version>
</dependency>

使用Jcaptcha

在项目的pom.xml中加入

<dependency>
  <groupId>com.octo.captcha</groupId>
  <artifactId>jcaptcha</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

在spring-config.xml中加入:

<bean id="jcaptchaImageProvider" class="org.beangle.struts2.captcha.service.CaptchaProvider" primary="true"/>

在login.ftl中添加

[@captcha.image provider=captchaProvider/]

使用Recaptcha

在spring-config.xml中加入:

<bean id="recaptchaProvider" class="org.beangle.struts2.captcha.service.CaptchaProvider" primary="true">
  <property name="publickey" value="your google recaptcha api public key"/>
  <property name="privatekey" value="your google recaptcha api private key"/>
</bean>

在login.ftl中添加

[@captcha.recaptcha provider=captchaProvider/]

Clone this wiki locally