验证码定义:
验证码(Capcha):是一种区分用户是计算机还是人的公共全自动程序。
作用:可以防止恶意破解密码,算票,论坛灌水,有效防止某个黑客对某个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
实际上用验证码是现在很多网站通行的方式,我们运用比较简单的方式实现这个功能。
实现步骤:
生成图片的类:
bufferedimage图像数据缓冲区
graphics绘制图片
color获取颜色
random生成随机数
imageio输出图片
生成图片的实现类:ImageServlet
1.定义bufferedimage对象
2.获取craphics对象
3.通过random产生随机验证码信息
4.使用graphics绘制图片
5.记录验证码信息到session中
6.使用imageIO输出图片
校验验证码是否正确:LoginServlet类
1.获取页面验证码
2.获取session保存的验证码
3.比较验证码
4.返回校验结果
前台页面的实现:
开源组件实现验证码:
Jcaptcha:一个用来生成图形验证码的java开源组件,使用起来非常方便。谕spring组合使用,可产生多种形式的验证码。
Kaptcha:一个常用使用的验证码生成工具,有了它,你可以生成各种样式的验证码,因为它是可配置的。
使用Jcaptcha开源组件:
验证码(Capcha):是一种区分用户是计算机还是人的公共全自动程序。
作用:可以防止恶意破解密码,算票,论坛灌水,有效防止某个黑客对某个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
实际上用验证码是现在很多网站通行的方式,我们运用比较简单的方式实现这个功能。
实现步骤:
生成图片的类:
bufferedimage图像数据缓冲区
graphics绘制图片
color获取颜色
random生成随机数
imageio输出图片
生成图片的实现类:ImageServlet
1.定义bufferedimage对象
2.获取craphics对象
3.通过random产生随机验证码信息
4.使用graphics绘制图片
5.记录验证码信息到session中
6.使用imageIO输出图片
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
Color c = new Color(200, 150, 255);
g.setColor(c);
g.fillRect(0, 0, 68, 22);
char[] ch = "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random r = new Random();
int len = ch.length, index;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255)));
g.drawString(ch[index] + "", (i * 15) + 3, 18);
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode", sb.toString());
ImageIO.write(bi, "JPG", response.getOutputStream());
}
}
校验验证码是否正确:LoginServlet类
1.获取页面验证码
2.获取session保存的验证码
3.比较验证码
4.返回校验结果
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
String piccode = (String) request.getSession().getAttribute("piccode");
piccode = piccode.toLowerCase();
String checkcode = request.getParameter("checkcode").toLowerCase();
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
if(checkcode.equals(piccode)){
out.println("验证码输入正确!");
}else{
out.println("验证码输入错误!!!");
}
out.flush();
out.close();
}
}
前台页面的实现:
<script type="text/javascript">
function reloadCode(){
var time = new Date().getTime();
document.getElementByIdx_x("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
}
</script>
<body>
验证码:<input type="text" name="checkcode"/>
<img alt="验证码" id="imagecode" src="<%=request.getContextPath() %>/servlet/ImageServlet"/>
<a href="javascript: reloadCode();">看不清楚</a><br>
<input type="submit" value="提交">
</body>
开源组件实现验证码:
Jcaptcha:一个用来生成图形验证码的java开源组件,使用起来非常方便。谕spring组合使用,可产生多种形式的验证码。
Kaptcha:一个常用使用的验证码生成工具,有了它,你可以生成各种样式的验证码,因为它是可配置的。
使用Jcaptcha开源组件:
首先在web-inf的lib文件夹下添加如下jar包: