JSP 验证码详解

验证码定义:
验证码(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包:


然后实现一个servlet:Submi
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值