版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HSH205572/article/details/86478370
第一步:在pom.xml 中导入所需依赖 如下:
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
第二步:在spring.xml或者spring-mvc.xml 中 添加如下bean对象
<!-- 验证码 -->
<bean id="kaptchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">no</prop>
<prop key="kaptcha.textproducer.font.color">25,60,170</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.image.width">42</prop>
<prop key="kaptcha.textproducer.char.space">1</prop>
<prop key="kaptcha.textproducer.font.size">14</prop>
<prop key="kaptcha.image.height">15</prop>
<prop key="kaptcha.textproducer.font.names">Arial</prop>
<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
<prop key="kaptcha.background.clear.from">white</prop>
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
第三步:后台代码 参考如下
package com.demoinfo.system.controller;
import com.google.code.kaptcha.Producer;
import com.demoinfo.support.constants.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
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;
import java.io.IOException;
/**
* 描述 验证码控制类
*
* @author ***
* @date 2019/1/14 10:32
*/
@Controller
@RequestMapping("/kaptcha")
public class DefaultKaptchaController {
private Logger logger = LoggerFactory.getLogger(DefaultKaptchaController.class);
@Resource
private Producer kaptchaProducer;
/**
* 描述 获取验证码
*
* @param
* @return
* @author ***
* @date 2019/1/14 15:40
*/
@RequestMapping("/getCheckCode")
public void getCheckCode(HttpServletRequest request, HttpServletResponse response) {
ServletOutputStream out = null;
try {
//设置页面不缓存
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");
// 生成验证码编码
String capText = kaptchaProducer.createText();
// 将验证码编码生成图片
BufferedImage kaptchaImage = kaptchaProducer.createImage(capText);
//输出验证码PNG格式图片
response.setHeader("content-type", "image/png");
out = response.getOutputStream();
ImageIO.write(kaptchaImage, "png", out);
out.flush();
//获取session,并将验证码编码存放到session中
HttpSession session = request.getSession();
session.setAttribute(Constants.DEFAULT_KAPTCHA_SESSION_KEY, capText);
} catch (IOException e) {
logger.info("*****服务端获取验证码异常*******" + e.getMessage());
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
logger.info("*****流关闭异常*******" + e.getMessage());
e.printStackTrace();
}
}
}
}
上述代码中的 com.icinfo.support.constants.Constants 类是自定义的常量类 参考如下:
public final class Constants {
/**
* 登录验证码session key
*/
public final static String DEFAULT_KAPTCHA_SESSION_KEY = "default_kaptcha_session_key";
//...
}
第四步:前端代码
jsp代码片段:
<input type="text" class="form-control" name="checkCode" id="checkCode"
placeholder="请输入验证码">
<div class="checkcode-wrap js-checkcode">
<img class="js-checkcode" src="/kaptcha/getCheckCode" width="82px"/>
</div>
对应的js代码片段:
$('.js-checkcode').on('click', function () {
$(this).attr('src', '/kaptcha/getCheckCode?t=' + Math.random());
})