Java笔记-使用Kaptcha验证码框架

Java笔记-使用Kaptcha验证码框架使用Kaptcha这个验证码框架用起来,比自己写简单首先设置maven项目:<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId>…

大家好,又见面了,我是你们的朋友全栈君。

使用Kaptcha这个验证码框架用起来,比自己写简单

首先设置maven项目:

        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

然后配置WEB-INF下的web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <servlet-mapping>
        <servlet-name>kaptchaDemo</servlet-name>
        <url-pattern>/kaptcha</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>kaptchaDemo</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>red</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.image.width</param-name>
            <param-value>80</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.image.height</param-name>
            <param-value>30</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <param-value>0123456789</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.char.space</param-name>
            <param-value>3</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.font.size</param-name>
            <param-value>24</param-value>
        </init-param>
<!--        <init-param>-->
<!--            <param-name>kaptcha.noise.impl</param-name>-->
<!--            <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>-->
<!--        </init-param>-->
    </servlet>

</web-app>

其中对应的jsp页面如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <base href="<%=basePath%>">

    <title>kaptchaDemo</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 = "kaptcha?"+Math.random();
        }
    </script>
</head>

<body>
<form action="login" method="post">
    <label>验证码:</label>
    <input type="text" id="inCode" name="inCode" />
    <img src="kaptcha" align="center" id="imgCode" onclick="changeCode()" />
    <a class="code_a" onclick="changeCode()">换一张</a><br />
    <input type="submit" value="登录"/>
</form>
</body>
</html>

这里src请求的是kaptcha的url。这里这个框架里面实现了一个Servlet,通过配置文件的方式,对某些属性进行设置(这里不用说了,肯定是反射)

程序运行截图如下:

Java笔记-使用Kaptcha验证码框架

输入错误时,依旧是这个界面,但输入正确后!

Java笔记-使用Kaptcha验证码框架

下面是关于他的验证方面的代码:

LoginServlet.java

import com.google.code.kaptcha.Constants;

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;

@WebServlet(value = "/login")
public class LoginServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String vailCode = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY).toString().toLowerCase();
        String inCode = request.getParameter("inCode").toLowerCase();

        if(inCode.equals(vailCode)){

            response.sendRedirect("success.jsp");
        }
        else{

            String url = request.getHeader("Referer");
            response.sendRedirect(url);
        }
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150383.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月18日 上午11:16
下一篇 2022年6月18日 上午11:16


相关推荐

  • mysql的驱动jar包_各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)

    mysql的驱动jar包_各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)java连接mysql数据库,数据库程序开发步骤首先就要加载JDBC驱动程序,不同版本的mysql数据库需要的MySQL数据库驱动程序jar包版本也不同。不少同学问怎么下载java连接mysql的驱动jar包?今天给大家分享:各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)项目中如何加载MySQL数据库驱动程序jar包如:mysql-connector-java-8…

    2022年5月22日
    190
  • 【自然语言处理】知识图谱之知识推理「建议收藏」

    【自然语言处理】知识图谱之知识推理「建议收藏」1.知识推理的分类归纳推理归纳推理所推出的结论是没有包含在前提内容中的。由个别事物推出一般性的知识的过程,是以为增殖新知识的过程。演绎推理:在已知领域内的一般性知识的前提下,通过求解一个具体的问题,或者证明一个结论的正确性。它所得出的结论,实际上早已蕴含在一般性的知识的前提中。演绎推理只是将已有的事实揭露出来,因此不能增殖新的知识。确定性推理多数时候是指逻辑推理,具有…

    2022年5月24日
    77
  • 二进制减法图解_二进制加法的算法图解

    二进制减法图解_二进制加法的算法图解二进制减法类似于十进制的减法,我们从十进制的减法来推出二进制减法如何进行运算。十进制减法例如74323-47562=26761的运算。灰色部分为计算过程,绿色字为被减一得到的数,红色字为借一后得到的数。在运算过程中,从右往左逐位进行计算。3-2=1;2不够减6,向前借一后加10变成12;12-6=6;3在上一步被借一所以减为2,2不够减5,…

    2026年3月11日
    6
  • XNA中的鼠标,键盘与操纵杆

    XNA中的鼠标,键盘与操纵杆

    2021年7月23日
    61
  • chatGPT国内怎么用?答案全在这里!3种方法随你选择

    chatGPT国内怎么用?答案全在这里!3种方法随你选择

    2026年3月15日
    1
  • SQLserver基础语句大全[通俗易懂]

    SQLserver基础语句大全[通俗易懂]SQL基础结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQLDML和DDL可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL)。SQL(结构化查询语言)是用于执行…

    2022年5月5日
    124

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号