100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Springboot整合kaptcha实现验证码

Springboot整合kaptcha实现验证码

时间:2024-02-25 12:33:44

相关推荐

Springboot整合kaptcha实现验证码

验证码的作用

防止恶意破解密码、刷票、论坛灌水、刷页。

有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。但我们还是 提醒大家要保护好自己的密码 ,尽量使用混杂了数字、字母、符号在内的 6 位以上密码,不要使用诸如 1234 之类的简单密码或者与用户名相同、类似的密码 ,免得你的账号被人盗用给自己带来不必要的麻烦。

验证码通常使用一些线条和一些不规则的字符组成,主要作用是为了防止一些黑客把密码数据化盗取。

Kaptcha 简介

kaptcha是一个很有用的验证码生成工具,由于它有许多可配置项,所以用它可以简单快捷的生成各式各样的验证码。可自由配置的选项如:

验证码的字体验证码字体的大小验证码字体的字体颜色验证码内容的范围(数字,字母,中文汉字!)验证码图片的大小,边框,边框粗细,边框颜色验证码的干扰线验证码的样式(鱼眼样式、3D、普通模糊、...)

Kaptcha 详细配置表

Springboot整合Kaptcha

1.引入maven依赖

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

2.编写kaptcha配置信息

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd"><!-- 生成kaptcha的bean--><bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"><property name="config"><bean class="com.google.code.kaptcha.util.Config"><constructor-arg type="java.util.Properties"><!--设置kaptcha属性 --><props><!-- 是否有边框 --><prop key="kaptcha.border ">yes</prop><!-- 边框颜色 --><prop key="kaptcha.border.color">105,179,90</prop><!-- 字体颜色 --><prop key="kaptcha.textproducer.font.color">blue</prop><!-- 图片宽度 --><prop key="kaptcha.image.width">100</prop><!-- 图片高度 --><prop key="kaptcha.image.height">50</prop><!-- 字体大小 --><prop key="kaptcha.textproducer.font.size">27</prop><!-- session key --><prop key="kaptcha.session.key">code</prop><!-- 验证码长度 --><prop key="kaptcha.textproducer.char.length">4</prop><!-- 字体 --><prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop><!-- 使用哪些字符 --><prop key="kaptcha.textproducer.char.string">0123456789</prop><!-- 图片样式 水纹 --><prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop><!-- 干扰颜色 --><prop key="kaptcha.noise.color">black</prop><!-- 干扰实现类 --><prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.DefaultNoise</prop><!-- 背景渐变 开始颜色 --><prop key="kaptcha.background.clear.from">185,56,213</prop><!-- 背景渐变 结束颜色 --><prop key="kaptcha.background.clear.to">white</prop><!-- 字符间隔 --><prop key="kaptcha.textproducer.char.space">3</prop></props></constructor-arg></bean></property></bean></beans>

可以使用xml,也可以使用注解conifg配置

3.利用刚才配置的Bean编写Controller,用于给客户端请求获得验证码图片

package cn.lzx.university_shop.controller;import com.google.code.kaptcha.Constants;import com.google.code.kaptcha.Producer;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import javax.imageio.ImageIO;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.awt.image.BufferedImage;/*** 用于生成验证码*/@Controllerpublic class CodeController {@Autowiredprivate Producer captchaProducer = null;@RequestMapping("/kaptcha")public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpSession session = request.getSession();response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");response.setContentType("image/jpeg");//生成验证码String capText = captchaProducer.createText();session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);//向客户端写出BufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();ImageIO.write(bi, "jpg", out);try {out.flush();} finally {out.close();}}}

4.编写页面

<!-- 验证码 kaptcha --><li><div class="item-content"><div class="item-media"><i class="icon icon-form-name"></i></div><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="/o2o/kaptcha"></div></div></div></li>

src请求路径即刚才Controller的访问路径

5.服务端效验

package cn.lzx.university_shop.utils;import com.google.code.kaptcha.Constants;import javax.servlet.http.HttpServletRequest;/*** 验证码*/public class CodeUtils {public static boolean checkVerifyCode(HttpServletRequest request){//期待值String verifyCodeExpected = (String)request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);//真实值String verifyCodeActual = request.getParameter("verifyCodeActual");if (verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)){return false;}return true;}}

期待值的key是刚才Controller里面设置的,真实值的key是前端传递过来的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。