验证码Kaptcha的使用「建议收藏」

验证码Kaptcha的使用「建议收藏」Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码。以图片的形式显示,从而无法进行复制粘贴。

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

引言

Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码。以图片的形式显示,从而无法进行复制粘贴。

1.引入Maven依赖

<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
		<dependency>
		    <groupId>com.github.penggle</groupId>
		    <artifactId>kaptcha</artifactId>
		    <version>2.3.2</version>
		</dependency> 

2.编写Servlet

接着我们需要在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>red</param-value>
  	</init-param>
  	<!-- 图片宽度 -->
  	<init-param>
  		<param-name>kaptcha.image.width</param-name>
  		<param-value>135</param-value>
  	</init-param>
  	<!-- 使用哪些字符生成验证码 -->
  	<init-param>
  		<param-name>kaptcha.textproducer.char.string</param-name>
  		<param-value>ACDEFHKPRSTWX345678</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>
  <servlet>

3.添加验证码控件

接着我们需要在前端html页面里添加验证码控件,同时设置点击验证码更新的设置

<!-- 验证码(避免重复提交) kaptcha -->
        <li>
          <div class="item-content">
            <div class="item-inner">
              <div class="item-title label">验证码</div>
              <input type="text" id="j-kaptcha" placeholder="验证码">
              <div class="item-input">
                <img id="kaptcha-img" alt="点击更换" title="点击更换"
                 οnclick="changeVerifyCode(this)" src="../Kaptcha" />
              </div>
            </div>
          </div>
        </li>

对应的Javascript中

function changeVerifyCode(img) {
	img.src="../Kaptcha?" + Math.floor(Math.random()*100);
}

4.Javascript的编写

此部分的作用是接收前端的数据,并将其传输到后台中去

var verifyCodeActual = $('#j-kaptcha').val();
			if(!verifyCodeActual) {
				$.toast('请输入验证码');
				return;
			}
			formData.append('verifyCodeActual', verifyCodeActual);
			$.ajax({
				url: registerShopUrl,
				type: 'POST',
				data: formData,
				contentType: false,
				processData: false,
				cache: false,
				success: function(data) {
					if(data.success) {
						$.toast('提交成功!');
					}else {
						$.toast('提交失败!' + data.errMsg);
					}
					$('kaptcha-img').click();
				}
			});

5.后台的完善

@RequestMapping(value = "/registershop", method = RequestMethod.POST)
	@ResponseBody
	private Map<String, Object> registerShop(HttpServletRequest request) {
		Map<String, Object> modelMap = new HashMap<String, Object>();
		/*进行验证码比对,并将比对结果返回给前端*/
		if(!CodeUtil.checkVerifyCode(request)) {
			modelMap.put("success", false);
			modelMap.put("errMsg", "验证码错误");
			return modelMap;
		}

其中,考虑到验证码部分可能后面还会用到,故将其设置为公共类

public class CodeUtil {
	public static boolean checkVerifyCode(HttpServletRequest request) {
		String verifyCodeExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
		String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
		if(verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)) {
			return false;
		}
		return true;
	}}

6.显示效果

验证码Kaptcha的使用「建议收藏」

7.遇到的问题

当然在开始引入kaptcha的jar包时,出现下载失败的情况,也就是如下情况

验证码Kaptcha的使用「建议收藏」

后来试了很多方法,最后发现在settings.xml的文件中增加镜像是一种比较好的方式,当时选择的是阿里云的Maven仓库镜像

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
  -->
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
     
  </mirrors>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机 VMware 中安装 Ubuntu[通俗易懂]

    准备工作Ubuntu获取地址:官网:https://www.ubuntu.com/download/server清华镜像站:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.04/VMware获取地址:链接:https://pan.baidu.com/s/16f_ka1BnfQkQRxxTbyCYK…

    2022年4月8日
    42
  • Android常用加密方式

    Android常用加密方式加密解密简介加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。加迷解密分类分为不可逆和…

    2022年5月17日
    39
  • 安装keil5(MDK)及导入pack包教程

    安装keil5(MDK)及导入pack包教程首先说明的是我安装的Keil版本为KeilV5.29.0.01、安装软件右键管理员权限运行安装包设置安装路径以及pack的存放路径随意输入FirstName和E-mail安装驱动完成软件安装,然后可以先关闭弹出的PackInstall(一会再添加)2、激活一下软件打开桌面的KeilFile→LicenseManagement(我之前注册过了)右…

    2022年5月27日
    2.0K
  • 学习笔记 | 独立成分分析(ICA, FastICA)及应用

    学习笔记 | 独立成分分析(ICA, FastICA)及应用这篇博客介绍了ICA算法和它的一些简单应用,主要内容有背景介绍、算法原理、代码分享和ICA在鸡尾酒问题上的应用,另外,文章还对ICA的改进算法FastICA作了介绍并附上了代码及实验分析。

    2022年5月13日
    43
  • google app(appstore安卓版下载)

    MiXCodecsapp是一款mix插件包,MiXCodecsapp整个在线的操作非常的简单,是没有任何的广告和收费问题的,MiXCodecsapp适合的类型比较多。软件介绍MiXCodecsapp是一个平滑的、功能齐全的文件管理应用程序MiXplorer文件管理器的插件工具,MiXCodecsapp让你有具有漂亮的界面,它支持批量移动和复制,以及各种分类,水平模式下无限制的标…

    2022年4月12日
    47
  • pycharm中python interpreter怎么设置_pycharm显示interpreter

    pycharm中python interpreter怎么设置_pycharm显示interpreter1.File–》Settings–》Project—-》ProjectInterpreter—》ShowAll(下拉列表中选择)2.点击加号+ —-&gt;SystemInterpreter(一定要选择这个阿)–点击OK即可3.备注下:不想要的版本点击减号-进行删除即可…

    2022年8月26日
    36

发表回复

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

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