jsp+servlet验证码验证

一. servlet绘制生成验证码

index.jsp – 前台页面

  <body>
  <form action="<%=request.getContextPath() %>/servlet/LoginServlet" method="get">
      验证码:<input type="text" name="VerifyCode" size=6 />
       <img onclick="reloadCode()" src="<%=request.getContextPath() %>/servlet/ImgServlet" id="img" /> <br>
       <input type="submit" name="submit" value="提交" /> 
  </form>   
        <script>
        function reloadCode(){
            document.getElementById("img").src="<%=request.getContextPath() %>/servlet/ImgServlet?"+Math.random();;
        }
        </script>
  </body>

ImgServlet.java – 绘制验证码图片

package servlet;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImgServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        BufferedImage bfi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB); //图像缓冲区
        Graphics g = bfi.getGraphics();
        StringBuffer sb = new StringBuffer();
        /*画背景框*/
        Color color = new Color(200,215,250); 
        g.setColor(color);
        g.fillRect(0, 0, 68,30); 
        /*第一个数字*/
        Random r = new Random();
        int tmp1 = r.nextInt(20);
        g.setColor(new Color(r.nextInt(100),r.nextInt(100),r.nextInt(100))); //设置随机颜色
        g.drawString(tmp1+"",3, 18);
        /*加号*/
        g.setColor(new Color(r.nextInt(100),r.nextInt(100),r.nextInt(100))); //设置随机颜色
        g.drawString("+",18, 18);   
        /*第二个数字*/
        int tmp2 = r.nextInt(20);
        g.setColor(new Color(r.nextInt(100),r.nextInt(100),r.nextInt(100))); //设置随机颜色
        g.drawString(tmp2+"",33, 18);   
        /*等号*/
        g.setColor(new Color(r.nextInt(100),r.nextInt(100),r.nextInt(100))); //设置随机颜色
        g.drawString("=",48, 18);   
        /*问号*/
        g.setColor(new Color(r.nextInt(100),r.nextInt(100),r.nextInt(100))); //设置随机颜色
        g.drawString("?",57, 18);
        /*保存到session*/
        int result = tmp1+tmp2;
        request.getSession().setAttribute("VerifyCode", result+"");
        /*写入response输出流*/
        ImageIO.write(bfi, "JPG", response.getOutputStream());
    }
}

LoginServlet.java – 校验与处理

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String re = request.getParameter("VerifyCode");
        String answer =(String)request.getSession().getAttribute("VerifyCode");
        PrintWriter out = response.getWriter();
        if(re.equals(answer)){  
            out.printf("验证成功");
        }else{
            out.printf("验证失败");
        }
        out.flush();
        out.close();
    }

}

二. 使用kaptcha验证码组件

1.. 添加kaptcha的jar包到项目lib库
2..配置web.xml

<servlet>  
    <servlet-name>Kaptcha</servlet-name>  
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>  
</servlet>  
<servlet-mapping>  
    <servlet-name>Kaptcha</servlet-name>  
    <url-pattern>/kaptcha.jpg</url-pattern>  
</servlet-mapping> 

3.. 页面调用

<body>
  <form action="<%=request.getContextPath() %>/servlet/LoginServlet" method="get">
      验证码:<input type="text" name="VerifyCode" size=6 />
       <img onclick="reloadCode()" src="kaptcha.jpg" id="img" /> <br>
       <input type="submit" name="submit" value="提交" /> 
  </form>   
        <script>
        function reloadCode(){
            document.getElementById("img").src="kaptcha.jpg?"+Math.random();;
        }
        </script>
  </body>

4..验证用户输入是否正确

/*获取session中的验证码*/
String captcha = ((String) request.getSession().getAttribute(
com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY));

kaptcha详细配置:

在web.xml的该servlet中配置初始化参数

属性param nameparam value
文本实现类kaptcha.textproducer.implcom.google.code.kaptcha.text.impl.DefaultTextCreator
验证码值配置kaptcha.textproducer.char.stringabcde2345678gfynmnpwx(自定义)
验证码的长度kaptcha.textproducer.char.length数字
字体kaptcha.textproducer.font.names字体
字体颜色kaptcha.textproducer.font.colorr,g,b 或者 white,black,blue
验证码宽度kaptcha.textproducer.img.width数字
验证码高度kaptcha.textproducer.img.height数字
干扰实现类kaptcha.noise.implcom.google.code.kaptcha.impl.DefaultNoise/NoNoise
干扰颜色kaptcha.noise.colorr,g,b 或者 white,black,blue
图片样式kaptcha.obscurificator.impl水纹com.google.code.kaptcha.impl.WaterRipple; 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy; 阴影com.google.code.kaptcha.impl.ShadowGimpy
背景实现类kaptcha.background.implcom.google.code.kaptcha.impl.DefaultBackground
背景渐变色(开始/结束)kaptcha.background.clear.from/tor,g,b 或者 white,black,blue
文字渲染器kaptcha.word.implcom.google.code.kaptcha.text.impl.DefaultWordRenderer
session中存放验证码的key键kaptcha.session.keyKAPTCHA_SESSION_KEY
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值