生成验证码的方式有很多,也有很多不同的组件,下面介绍下如何使用kaptcha验证码组件。
1.添加jar
maven坐标如下:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
2.配置servlet和拦截的url
<!--验证码-->
<servlet>
<!-- 生成图片的Servlet -->
<servlet-name>verCode</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<!-- 是否有边框-->
<init-param>
<param-name>kaptcha.border</param-name>
<param-value>yes</param-value>
</init-param>
<!-- 边框颜色-->
<init-param>
<param-name>kaptcha.border.color</param-name>
<param-value>196,165,0</param-value>
</init-param>
<!-- 背景色-->
<init-param>
<param-name>kaptcha.background.clear.from</param-name>
<param-value>white</param-value>
</init-param>
<init-param>
<param-name>kaptcha.background.clear.to</param-name>
<param-value>white</param-value>
</init-param>
<!-- 字体颜色 -->
<init-param>
<param-name>kaptcha.textproducer.font.color</param-name>
<param-value>90,142,0</param-value>
</init-param>
<!-- 样式 -->
<!--<init-param>-->
<!--<param-name>kaptcha.obscurificator.impl</param-name>-->
<!--<param-value>com.google.code.kaptcha.impl.ShadowGimpy</param-value>-->
<!--</init-param>-->
<!-- 图片宽度 -->
<init-param>
<param-name>kaptcha.image.width</param-name>
<param-value>130</param-value>
</init-param>
<!-- 使用哪些字符生成验证码 -->
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>ABCDEFGHKLMNPRSTWXY12345679</param-value>
</init-param>
<!-- 图片高度 -->
<init-param>
<param-name>kaptcha.image.height</param-name>
<param-value>35</param-value>
</init-param>
<!--字体大小-->
<init-param>
<param-name>kaptcha.textproducer.font.size</param-name>
<param-value>30</param-value>
</init-param>
<!--干扰线的颜色-->
<init-param>
<param-name>kaptcha.noise.color</param-name>
<param-value>87,57,57</param-value>
</init-param>
<!--字符个数-->
<init-param>
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>4</param-value>
</init-param>
<!--使用哪些字体-->
<init-param>
<param-name>kaptcha.textproducer.font.names</param-name>
<param-value>Arial</param-value>
</init-param>
</servlet>
<!--映射的url -->
<servlet-mapping>
<servlet-name>verCode</servlet-name>
<url-pattern>/api/verCode</url-pattern>
</servlet-mapping>
3.前台获取图片
前台使用<img>标签的src属性指定这个url就可以得到验证码的图片
4.验证验证码
因为在请求这个url后,这个servlet除了生成了图片外,还把随机生成的验证码放在当前的session中。需要验证的时候,首先从session去取key为KAPTCHA_SESSION_KEY的值,该值就是验证码的值,然后对比前台传过来的验证码,一致则验证码正确。
String vcode = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);