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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数学速算法_三年级数学时分秒换算口诀+精选思维奥数题整理汇总[通俗易懂]

    数学速算法_三年级数学时分秒换算口诀+精选思维奥数题整理汇总[通俗易懂]文末有打印方法时间单位换算口诀1世纪=100年1年=12月大月(31天)有:1月,3月,5月,7月,8月,10月,12月小月(30天)的有:4月,6月,9月,11月平年2月28天,闰年2月29天平年全年365天,闰年全年366天1日=24小时1时=60分1分=60秒1时=3600秒时间之间的进率都是601时=60分1分=60秒…

    2022年6月15日
    107
  • docker-compose 集群_hadoop完全分布式搭建步骤

    docker-compose 集群_hadoop完全分布式搭建步骤前言实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器。我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有

    2022年7月28日
    21
  • java jquery 文件下载_jquery下载教程_jquery下载文件到指定的目录

    java jquery 文件下载_jquery下载教程_jquery下载文件到指定的目录在使用jquery这种工具的时候,文档的说明是非常全面的,而且各种各样的应用也十分详细,同时其中还包含了很多比较成熟的插件,能够方便用户自由自在的选择。在应用这种模式编程的时候,能构造用户的html页面保持代码和内容分离的状态。jquery下载在功能设置方面也是比较齐全的,将核心的代码规按照相应的功能进行分割,对于那些不需要的代码就不需要进行加载,有效的避免了延迟加载,配备的有上万节点,可以轻轻松…

    2022年6月6日
    34
  • python灰度图生成g代码_artcam pro 通过灰度图生成G代码详细图文教程

    python灰度图生成g代码_artcam pro 通过灰度图生成G代码详细图文教程本文是使用artcampro把灰度图转成G代码,看到喜欢的雕刻,可以自己先做成灰度图,然后转换成G代码,今天特地做了一个教程,仅供刚刚接触者使用!新手可以看看,老手请高抬贵手,不要嘲笑。自己技术有限,将就看吧!希望对大家有用!灰度图生成G代码详细图文教程如下:1、先找一张灰度图:2、打开软件,点“文件”–“新的”–“通过图像文件”,找到刚才自己打开的灰度图,双击图片就可以了。3、设置雕刻尺…

    2022年6月20日
    48
  • Linux 日志查看 | tail 命令「建议收藏」

    Linux 日志查看 | tail 命令「建议收藏」tail命令可以将文件指定位置到文件结束的内容写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件。tail-ffilename会把文件里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。NAME(名称)tail-outputthelastpartoffiles输出文件的最后一部分SYNO…

    2022年6月3日
    84
  • 基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计

    基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计前言本人也是正在学习单片机知识的萌新一枚,在这里记录下自己完成这个小设计的过程跟大家分享一下,也请大家指出我哪里还有不足可以改进的地方。秉着和大家一起学习进步发布了这篇文章STM32F103ZET6单片机我使用的单片机是正点原子版的STM32F1精英版,型号是ZET6。32系列的单片机功能比较完整,基本所有的小设计都可以使用32完成,而且现在市面上使用32系列的人也是不在少数,所以推荐大家使用这款单片机去完成各种实验和设计。…

    2022年9月18日
    2

发表回复

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

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