验证码几乎是所有站点都会用到的,验证码在一定程序上能有效处理一些恶意攻击。验证码的类库有很多,这里用到生成验证码的工具是SimpleCaptcha,目前在官网看到最新版的是1.2.1,下载地址。
首先将类库的包下载引入到项目中,写一个用于生成和校验验证码的工具类。下面给出生成验证码的工具类:
1 | import java.awt.Color; |
其中DemonPredict类是自己写的一个断言类,在这里不给出代码,读者可以写一个或者用第三方包提供的断言类。这个工具类主要是生成一个Captcha,把Captcha的image写回客户端,并缓存到session中,当check后再把Captcha从session中删除。下面再给出另一个工具类,主要是针对shiro项目,在HttpCaptchaHelper基础上进一步封装:
1 | import javax.servlet.ServletRequest; |
下面是一个测试用的controller代码
1 | import javax.servlet.http.HttpServletRequest; |
页面获取验证码的html为:
1 |
|
这里有一个地方要注意的是,页面的js点击事件里加了Math.random().toString(),这样火狐和ie浏览器才可以正常改变验证码。这个,这个问题在谷歌浏览器不存在。