Java--验证码-完整Demo

    技术2024-01-14  93

    JavaWeb实现验证码

    1:引入Kaptcha相关的jar包

    <!-- 验证码工具 --> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>

    2:在web.xml中添加servlet配置

    <!-- 生成验证码图片的 servlet工具--> <servlet> <servlet-name>kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class> <!-- 是否有边框 --> <init-param> <param-name>kaptcha.border</param-name> <param-value>no</param-value> </init-param> <!-- 字体颜色 --> <init-param> <param-name>kaptcha.textproducer.font.color</param-name> <param-value>blue</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>ajgjoangJANKLPG9623451</param-value> </init-param> <!-- 图片高度 --> <init-param> <param-name>kaptcha.image.height</param-name> <param-value>50</param-value> </init-param> <!-- 验证码字体大小 --> <init-param> <param-name>kaptcha.textproducer.font.size</param-name> <param-value>43</param-value> </init-param> <!-- 干扰线颜色 --> <init-param> <param-name>kaptcha.noise.color</param-name> <param-value>black</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> <servlet-mapping> <servlet-name>kaptcha</servlet-name> <url-pattern>/kaptcha</url-pattern> </servlet-mapping> 前端发送请求后,kaptcha会按照设置生成随机的验证码图片。

    3:编写前端页面(form表单)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>验证码</title> </head> <body> <form action="/checkCode" method="POST"> <img src="/kaptcha" alt="验证码" onclick="refresh(this)"> <input type="text" name="code"> </form> </body> <script> //点击刷新验证码 function refresh(img) { img.src = "../kaptcha?"+Math.floor(Math.random()*100); } </script> </html>

    4:校验(验证码)的servlet

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import com.google.code.kaptcha.Constants; @WebServlet("/checkCode") public class CheckCode extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取表单中填写的验证码,转为小写 String code = req.getParameter("code"); code = code.toLowerCase(); //从session中获取服务器生成的验证码 字符 String realCode = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY); //非空校验 if (code == null || "".equals(code) || null == realCode || "".equals(realCode)){ System.out.println(false); return; } //判断是是否匹配 if (code.equals(realCode.toLowerCase())){ System.out.println(true); } } }

    5:小结

    kaptcha生成一个验证码图片,并将生成验证码的字符放在session的作用域里。 在form表单提交验证码后,通过request到session中获取生成验证码的字符,与form输入的验证码字符作比较。

    6:收工

    最近一个小项目中用到,就把这块提出来,做个记录!!! 代码是从现在写的项目中抽出来的,只作为一个简单的demo参考。 将验证码最简单的实现,拼凑出来做个记录,目前还没有实测。
    Processed: 0.010, SQL: 9