本文介绍 SpringBoot 使用 kaptcha 验证码,其实和 SpringBoot 没啥关系,主要是 kaptcha 的使用。
一个 SpringBoot 项目或者 SpringMVC 项目。
引入依赖
方法一、
新建 CaptchaConfig.java
方法二、
1、在resources中创建一个xxx.xml文件 如:
mykaptcha.xml文件:
2、在springboot启动类上引入这
TestController.java
test.html
访问 localhost:8080/test,可以看到有验证码,填写图中的验证码提交
显示错误的验证码
查看控制台信息,如我们所料
再次输入验证码,点提交,这次提交正确
再次查看控制台,验证码正确
本文链接:https://liuyanzhao.com/7433.html
一、准备工作
一个 SpringBoot 项目或者 SpringMVC 项目。
引入依赖
- <!--验证码kaptcha-->
- <dependency>
- <groupId>com.github.penggle</groupId>
- <artifactId>kaptcha</artifactId>
- <version>2.3.2</version>
- </dependency>
二、加入 kaptcha 配置
方法一、
新建 CaptchaConfig.java
- package com.liuyanzhao.chuyun.config;
- import com.google.code.kaptcha.impl.DefaultKaptcha;
- import com.google.code.kaptcha.util.Config;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import java.util.Properties;
- /**
- * @author 言曌
- * @date 2018/1/30 下午11:31
- */
- @Configuration
- public class CaptchaConfig {
- @Bean(name="captchaProducer")
- public DefaultKaptcha getKaptchaBean(){
- DefaultKaptcha defaultKaptcha=new DefaultKaptcha();
- Properties properties=new Properties();
- properties.setProperty("kaptcha.border", "yes");
- properties.setProperty("kaptcha.border.color", "105,179,90");
- properties.setProperty("kaptcha.textproducer.font.color", "blue");
- properties.setProperty("kaptcha.image.width", "125");
- properties.setProperty("kaptcha.image.height", "45");
- properties.setProperty("kaptcha.session.key", "code");
- properties.setProperty("kaptcha.textproducer.char.length", "4");
- properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
- Config config=new Config(properties);
- defaultKaptcha.setConfig(config);
- return defaultKaptcha;
- }
- }
方法二、
1、在resources中创建一个xxx.xml文件 如:
mykaptcha.xml文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
- <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">
- <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>
- <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">0123456789ABCEFGHIJKLMNOPQRSTUVWXYZ</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>
2、在springboot启动类上引入这
- @SpringBootApplication
- @ImportResource(locations={"classpath:mykaptcha.xml"})
- public class Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
三、显示验证码
TestController.java
- package com.liuyanzhao.chuyun.controller;
- import com.google.code.kaptcha.impl.DefaultKaptcha;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.GetMapping;
- 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;
- import java.io.ByteArrayOutputStream;
- /**
- * @author 言曌
- * @date 2018/1/30 下午11:37
- */
- @Controller
- public class TestController {
- @Autowired
- DefaultKaptcha defaultKaptcha;
- /**
- * 显示验证码
- * @param request
- * @param response
- * @throws Exception
- */
- @RequestMapping("/defaultKaptcha")
- public void defaultKaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
- byte[] captchaChallengeAsJpeg = null;
- ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
- try {
- //生产验证码字符串并保存到session中
- String createText = defaultKaptcha.createText();
- request.getSession().setAttribute("verifyCode", createText);
- //使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中
- BufferedImage challenge = defaultKaptcha.createImage(createText);
- ImageIO.write(challenge, "jpg", jpegOutputStream);
- } catch (IllegalArgumentException e) {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- //定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组
- captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
- response.setHeader("Cache-Control", "no-store");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
- response.setContentType("image/jpeg");
- ServletOutputStream responseOutputStream =
- response.getOutputStream();
- responseOutputStream.write(captchaChallengeAsJpeg);
- responseOutputStream.flush();
- responseOutputStream.close();
- }
- /**
- * 映射 test.html
- * @return
- */
- @GetMapping("/test")
- public String test() {
- return "/test";
- }
- /**
- * 验证码输入验证
- * @param model
- * @param session
- * @param verifyCode
- * @return
- */
- @GetMapping("/verifyCode")
- public String imgverifyControllerDefaultKaptcha(Model model, HttpSession session, String verifyCode) {
- String captchaId = (String) session.getAttribute("verifyCode");
- System.out.println("验证码是:" + captchaId);
- System.out.println("用户输入的是:" + verifyCode);
- if (!captchaId.equals(verifyCode)) {
- System.out.println("输入错误");
- model.addAttribute("info", "错误的验证码");
- } else {
- System.out.println("输入正确");
- model.addAttribute("info", "正确");
- }
- return "/test";
- }
- }
test.html
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>kaptcha 测试</title>
- </head>
- <body>
- <h1 th:text="${info}"/>
- <div>
- <img alt="验证码" onclick="this.src='/defaultKaptcha?d='+new Date()*1" src="/defaultKaptcha"/>
- </div>
- <form action="/verifyCode">
- <input type="text" name="verifyCode"/>
- <input type="submit" value="提交"/>
- </form>
- </body>
- </html>
效果图
访问 localhost:8080/test,可以看到有验证码,填写图中的验证码提交
显示错误的验证码
查看控制台信息,如我们所料
再次输入验证码,点提交,这次提交正确
再次查看控制台,验证码正确
本文链接:https://liuyanzhao.com/7433.html
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏