Java--验证码-完整Demo

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参考。

将验证码最简单的实现,拼凑出来做个记录,目前还没有实测。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值