java语言使用代码方式实现Kaptcha验证码的案例及代码

首先使用maven搭建web项目导入一下servlet依赖

 <!-- servlet依赖的jar包start -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <!-- servlet依赖的jar包start -->
    <!-- jsp依赖jar包start -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
    </dependency>
    <!-- jsp依赖jar包end -->
    <!--jstl标签依赖的jar包start -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!--jstl标签依赖的jar包end -->

第二步前端页面有点简陋自己用到时改一下根据自己的页面就行了,页面代码

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2020/2/12
  Time: 12:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<title>使用代码实现kaptcha验证码</title>
<style type="text/css">
    .code_a {
        color: #0000ff;
        font-size: 12px;
        text-decoration: none;
        cursor: pointer;
    }

    #imgCode {
        cursor: pointer;
    }
</style>
<script type="text/javascript">
    function changeCode() {
        var imgCode = document.getElementById("imgCode");
        imgCode.src="codesKaptcha?"+Math.random();
    }
</script>
<body>
<form action="vailCodeKaptchas" method="post">
    <label>验证码:</label>
    <input type="text" id="inputCode" name="inputCode" placeholder="输入验证码,大小写无关"/>
    <%--此处src的名称codeImage与web.xml中配置的<url-pattern>/codeImage</url-pattern>名称相同--%>
    <img src="codesKaptcha" id="imgCode" align="center" onclick="changeCode()"/>
    <a class="code_a" onclick="changeCode()">看不清!切换一张</a><br>
    <input type="submit" value="登录">
</form>
<div style="color: #ff0000;">${errMsg}</div>
</body>
</html>

最重要的配置web.xml配置此处小心、

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
    <display-name>Archetype Created Web Application</display-name>

    <!--生成验证码的使用代码实现kaptcha验证码的servlet-->
    <servlet>
        <servlet-name>codeKaptchas</servlet-name>
        <servlet-class>demo3.servlet.CodeKaptchaServlet</servlet-class>
    </servlet>
   <!--访问路径src生成验证的图片-->
    <servlet-mapping>
        <servlet-name>codeKaptchas</servlet-name>
        <url-pattern>/codesKaptcha</url-pattern>
    </servlet-mapping>
    <!--验证使用代码生成kaptcha验证码的servlet-->
    <servlet>
        <servlet-name>vailCodesKaptchas</servlet-name>
        <servlet-class>demo3.servlet.VailCodesKaptchas</servlet-class>
    </servlet>
    <!--提交使用代码实现kaptcha的访问路径action-->
    <servlet-mapping>
        <servlet-name>vailCodesKaptchas</servlet-name>
        <url-pattern>/vailCodeKaptchas</url-pattern>
    </servlet-mapping>
    <!--<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>-->

</web-app>

生成验证码的servlet代码

package demo3.servlet;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import sun.security.krb5.Config;
import sun.security.krb5.KrbException;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Properties;

/**
 * package_name:demo3.servlet
 * Author:徐亚远
 * Date:2020/2/12 12:19
 * 项目名:code-projects
 * Desription:
 **/
public class CodeKaptchaServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置属性集
        Properties pro = new Properties();
        //是否有边框
        pro.put("Kaptcha.border", "no");
        //字体颜色
        pro.put("kaptcha.textproducer.font.color", "red");
        //图片宽度
        pro.put("kaptcha.image.width", "125");
        //<!--使用哪些字符生成验证码-->
        pro.put("kaptcha.textproducer.char.string", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
        //图片高度
        pro.put("kaptcha.image.height", "50");
        //字体大小
        pro.put("kaptcha.textproducer.font.size", "43");
        //干扰线的颜色
        pro.put("kaptcha.noise.color", "black");
        //字符个数
        pro.put("kaptcha.textproducer.char.length", "4");
        //字体
        pro.put("kaptcha.textproducer.font.names", "Arial");
        pro.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
        com.google.code.kaptcha.util.Config config = new com.google.code.kaptcha.util.Config(pro);
        //创建kaptcha对象
        DefaultKaptcha kaptcha = new DefaultKaptcha();
        kaptcha.setConfig(config);
        //生成验证码保存在session中
        String kaptchaCode = kaptcha.createText();
        req.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, kaptchaCode);
        //生成图片
        BufferedImage image = kaptcha.createImage(kaptchaCode);
        //返回图片
        ServletOutputStream sos = resp.getOutputStream();
        ImageIO.write(image, "png", sos);
        sos.flush();
        sos.close();

    }
}

验证验证码的servlet代码

package demo3.servlet;

import com.google.code.kaptcha.Constants;
import com.sun.org.apache.bcel.internal.classfile.Code;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * package_name:demo3.servlet
 * Author:徐亚远
 * Date:2020/2/12 12:41
 * 项目名:code-projects
 * Desription:
 **/
public class VailCodesKaptchas extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp );
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //得到数据输入框输入的
        String inputCode = req.getParameter("inputCode").toString().toLowerCase();
        //得到生成的验证码数据
        String vailKaptcha = req.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY).toString().toLowerCase();
        if (inputCode.equals(vailKaptcha)){
            resp.sendRedirect("success.jsp");
        }else {
            req.getSession().setAttribute("errMsg","验证码输入错误,请重新输入" );
            //返回上一页
            resp.sendRedirect("codesKaptchas.jsp");
        }

    }
}

实现效果如图:
在这里插入图片描述

发布了64 篇原创文章 · 获赞 1 · 访问量 902

猜你喜欢

转载自blog.csdn.net/weixin_43311650/article/details/104278482