课程名称:Java工程师2022版
课程章节:SSM开发社交网站
课程内容:
①Kaptcha生成验证码:kaptcha 是一个扩展自 simplecaptcha 的验证码库,默认情况下,Kaptcha 非常易于设置和使用,并且默认输出会产生一个很难验证的验证码。
课程收获:
使用Kaptcha生成验证码流程:
1. pom.xml添加依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
2. applicationContext.xml配置:
<!--配置Kaptcha-->
<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>
<!--验证码图片宽度为120像素-->
<prop key="kaptcha.image.width">120</prop>
<!--验证码图片字体颜色为蓝色-->
<prop key="kaptcha.textproducer.font.color">blue</prop>
<!--每个字符最大占用40像素-->
<prop key="kaptcha.textproducer.font.size">40</prop>
<!--验证码包含4个字符-->
<prop key="kaptcha.textproducer.char.length">4</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
3. 新增KaptchaController
@Controller
@RequestMapping("/api/verify")
public class KaptchaController {
@Resource
private Producer kaptchaProducer;
@GetMapping("/code")
public void createVerifyCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
//响应立即过期
response.setDateHeader("Expires",0);
//不缓存任何图片数据
response.setHeader("Cache-Control" , "no-store,no-cache,must-revalidate");
response.setHeader("Cache-Control" ,"post-check=0,pre-check=0");
response.setHeader("Pragma" , "no-cache");
response.setContentType("image/png");
//生成验证码图片
String text = kaptchaProducer.createText();
request.getSession().setAttribute("kaptchaVerifyCode",text);
BufferedImage image = kaptchaProducer.createImage(text);
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(image,"png",outputStream);
outputStream.flush();
outputStream.close();
}
}
4. 修改前端后进行验证
String verifyCode = (String) request.getSession().getAttribute("kaptchaVerifyCode");
ResponseUtils resp = null;
if(vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)){
resp = new ResponseUtils("VerifyCodeError","验证码错误");
}else {
resp = new ResponseUtils();
}
总结:
使用Kaptcha生成验证码后将其放入服务器端的Session中,在验证时获取Session的对应值进行比对,若相符则进行下一步操作。