实战SSM_O2O商铺_14【商铺注册】View层之验证码kaptcha组件
文章目录
- Kaptcha概述
- maven依赖
- web.xml配置Kaptcha对应的servlet,设置属性
- 页面
- shopoperation.html中定义组件
- common.js
- shopoperation.js使用
- spring-web.xml配置multipartResolver
- 控制层
- 封装校验验证码的工具类
- 控制层获取验证码做校验
- Github地址
Kaptcha概述
GitHub:
https://github.com/penggle/kaptcha
官网
http://code.google.com/p/kaptcha/
Kaptcha是基于SimpleCaptcha的开源项目。通过调整Kaptcha配置可以生成各种样式的验证码。
Kaptcha提供的功能如下:
验证码的字体
验证码字体的大小
验证码字体的字体颜色
验证码内容的范围
验证码图片的大小,边框,边框粗细,边框颜色
验证码的干扰线
验证码的样式
maven依赖
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>
web.xml配置Kaptcha对应的servlet,设置属性
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1" metadata-complete="true"><!-- 配置DispatcherServlet -->.........省略.........省略<!-- 为避免编码不一致,一般情况下都需要增加编码过滤器 -->.........省略.........省略<!-- 生成图片的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>ACDEFHKPRSTWX345679</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><!-- 映射的url --><servlet-mapping><servlet-name>Kaptcha</servlet-name><url-pattern>/Kaptcha</url-pattern></servlet-mapping></web-app>
页面
shopoperation.html中定义组件
/o2o/src/main/webapp/WEB-INF/html/shop/shopoperation.html
输入部分input :设置id,便于js中操作
图片部分img :设置id, 定义onClick事件,通过src属性,调用对应的servlet
<!-- 验证码 kapa--><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="点击更换"onclick="changeVerifyCode(this)" src="../Kaptcha"> <!-- src是找到web.xml中 对应的servlet的名字 --></div></div></div></li>
最后引用自定义的common.js
<script type='text/javascript'src='../resources/js/common/common.js' charset='utf-8'></script>
common.js
/o2o/src/main/webapp/resources/js/common/common.js
点击触发更换验证码
function changeVerifyCode(img){img.src="../Kaptcha?" + Math.floor(Math.random() * 1000)
}
shopoperation.js使用
/o2o/src/main/webapp/resources/js/shop/shopoperation.js
通过html中设置的id值,获取输入属性,做了一层很弱的校验,并封装到formData中利用ajax发送到后台
/*** submit按钮触发的操作*/$('#submit').click(function() {// 获取页面的值var shop = {};.........省略.........省略// 验证码var verifyCodeActual =$('#j_kaptcha').val();console.log('verifyCodeActual:'+verifyCodeActual);if(!verifyCodeActual){$.toast('请输入验证码');return;}// 接收数据var formData = new FormData();// 将数据封装到formData发送到后台formData.append('verifyCodeActual',verifyCodeActual);.........省略.........省略// 利用ajax提交$.ajax({url:registerShopUrl,type:'POST',data:formData,contentType:false,processData:false,cache:false,success:function(data){if(data.success){$.toast('提示信息:'+data.errMsg);}else{$.toast('提示信息:' + data.errMsg);}// 点击提交后 不管成功失败都更换验证码,防止重复提交$('#kaptcha_img').click();}});});
spring-web.xml配置multipartResolver
/o2o/src/main/resources/spring/spring-web.xml
我们的首页使用了文件上传,以及验证码(图片),multipart类型。 Spring需要multipartResolver来接收解析这部分流。 如果不配置的话,无法获取到输入的验证码。
<!-- 文件上传解析器 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"></property><property name="maxUploadSize" value="10485760000"></property><!-- 最大上传文件大小 --><property name="maxInMemorySize" value="10960"></property></bean>
控制层
封装校验验证码的工具类
package com.artisan.o2o.util;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class VerifyCodeUtil {private static final Logger logger = LoggerFactory.getLogger(VerifyCodeUtil.class);/*** * * @Title: verifyCode* * @Description:验证码校验* * @param request* 前端HttpServletRequest* @return* * @return: boolean*/public static boolean verifyCode(HttpServletRequest request) {// 图片中的验证码String verifyCodeExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);logger.debug("verifyCodeExpected:{}", verifyCodeExpected);// 用户输入的验证码String verifyCodeActual = HttPServletRequestUtil.getString(request,"verifyCodeActual");logger.debug("verifyCodeActual:{}", verifyCodeActual);if (verifyCodeActual == null|| !verifyCodeActual.equalsIgnoreCase(verifyCodeExpected)) {return false;}return true;}
}
控制层获取验证码做校验
在 ShopController#registerShop()中,首先进行验证码的校验工作,使用封装的工具类,如果输入错误,直接返回给前端,将错误结果放入modelMap中。
// 0. 验证码校验if (!VerifyCodeUtil.verifyCode(request)) {modelMap.put("success", false);modelMap.put("errMsg", "验证码不正确");return modelMap;}
Github地址
代码地址: https://github.com/yangshangwei/o2o
实战SSM_O2O商铺_14【商铺注册】View层之验证码kaptcha组件相关推荐
- 校园O2O商铺平台-店铺注册Service层和Controller层
店铺注册之Service层的实现 正在更新 店铺注册功能之Controller层的实现 正在更新 店铺注册功能之Controller层的改造 正在更新
- 校园O2O商铺平台-店铺注册DAO层与图片处理
DAO层之新增店铺 正在更新 DAO层之更新店铺 正在更新 Thumbnailator图片处理和封装Util 正在更新 Dto之ShopExecution的实现 正在更新
- 实战SSM_O2O商铺_15【商铺注册】View层+Controller层之图片上传
文章目录 概述 Maven依赖 文件上传解析器bean的配置 页面 shopoperation.html增加上传组件 shopoperation.js Controller层 Github地址 概述 ...
- 实战SSM_O2O商铺_13【商铺注册】View层之初始化页面数据
文章目录 请求过程分析 DAO层的实现 AreaDao接口,Mapper映射文件及单元测试 ShopCategoryDao接口 ShopCategoryDao.xml Mapper映射文件 单元测试 ...
- 实战SSM_O2O商铺_12【商铺注册】View层之前台页面
文章目录 概述 前端框架选择 页面目录结构 搭建商铺注册页面 JS部分 shopoperation.js common.js 乱码问题 将页面迁到WEB-INF目录下 Controller层的编写 访 ...
- 实战SSM_O2O商铺_11【商铺注册】Controller层的实现
文章目录 概述 结构 Maven依赖 封装工具类HttPServletRequestUtil Controller控制层编写 Service层的改造 单元测试 Github地址 概述 实战SSM_O2 ...
- 实战SSM_O2O商铺_40【前端展示】首页轮播图和一级商铺View层的实现
文章目录 概述 index.html index.js index.css Controller 调测 修复问题 头条图片展示修复 一级类别商铺图片展示修复 Github地址 概述 在完成了后端 实战 ...
- 实战SSM_O2O商铺_31【商品】商品添加之View层的实现
文章目录 概述 productoperation.html productoperation.js 联调 检查结果 库表数据: 磁盘上的图片 Github地址 概述 在完成了 实战SSM_O2O商铺_ ...
- 实战SSM_O2O商铺_27【商品类别】删除商品类别从Dao到View层的开发
文章目录 概述 Dao层 ProductCategoryDao接口增加接口方法 ProductCategoryDao SQL映射文件 闭环的单元测试 Servie层 接口 接口实现 单元测试 Cont ...
最新文章
- 浏览器默认标签样式总结及css初始化程序(转)
- LVS(7)——NAT实践
- ie浏览器升级_微软呼吁用户停用IE浏览器 2020年将不再更新升级
- java多线程为啥一直用的一个线程_一个Java多线程的问题,颠覆了我多年的认知!...
- 人生规划:20岁到60岁我该干什么
- tensorflow之数据集
- python3 编程学习链接
- 阿里的数据同步神器——Canal
- NC63重写导入功能
- 6.泛型方法:什么是泛型方法???
- python3爬取torrent种子链接实例
- 关于模板函数声明与定义的问题
- iOS 自定义播放器
- 二维特征分类的基础_带你搞懂朴素贝叶斯分类算法
- 数据库操作--已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
- 学习笔记(十八):MoRe-Fi用深度学习网络从非线性信号中恢复呼吸波形
- 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)?
- friends101. The One Where Monica Gets a New Roommate (The Pilot)
- win10 安装k8s
- 趋势外推预测 这一篇就够了(附上例题)~~~~~~~~~~~
热门文章
- C++虚继承和虚基类详解(二)
- C++继承时的名字遮蔽(一)
- python字符串替换空格_python - 用pandas中的NaN替换空白值(空格)
- anaconda不同虚拟环境下使用jupyter的问题
- Tableau实战系列浏览 Tableau 环境(三) -在“数据”窗格的数据源中导航
- SecureCRT使用
- 深度学习100例-卷积神经网络(VGG-16)猫狗识别 | 第21天
- 十行Python代码搞定图片中的物体检测
- sublime使用笔记
- 饿了么多活利器:实时双向复制工具(DRC)