1.谷歌验证码的问题:
- 原来的项目是MVC+mybatis,现在的是boot+plus,改动的时候,验证码这块原先的三部曲当中的配置不知道在哪里配置了
- 1.导入依赖
- 2.主配置文件注入验证码的bean
- 3写控制器
- boot项目
- 1.导入依赖
-
<!--验证码--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>
- 2.编写配置类,不然控制器注入的时候,会出错
-
package com.pro.domain; import com.google.code.kaptcha.Producer; 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; @Configuration public class KaptchaConfig { /** * Kaptcha图形验证码工具配置类 * @author: Xiongch * @param: * @return: com.google.code.kaptcha.Producer * @date: 2022/9/9 15:47 */ @Bean public Producer kaptchaProducer() { // 实例一个DefaultKaptcha 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", "50"); // 设置session.key properties.setProperty("kaptcha.session.key", "code"); // 设置文本长度 properties.setProperty("kaptcha.textproducer.char.length", "4"); // 设置字体 properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑"); // 将以上属性设置为实例一个DefaultKaptcha的属性 Config config = new Config(properties); defaultKaptcha.setConfig(config); // 将defaultKaptcha返回 return defaultKaptcha; } }
- 3.编写控制器
-
package com.pro.controller; import com.google.code.kaptcha.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; @Controller public class KaptchaController { @Autowired private Producer defaultKaptcha;//这个名字要和主配置文件里面的相同<bean id="defaultKaptcha" @GetMapping("verify_code") public void createVerifycode(HttpServletRequest request, HttpServletResponse response)throws Exception{ 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 verifyCode=defaultKaptcha.createText(); request.getSession().setAttribute("verifyCode",verifyCode); System.out.println(request.getSession().getAttribute("verifyCode")); //转图片 BufferedImage image = defaultKaptcha.createImage(verifyCode);//创建验证码图片 ServletOutputStream outputStream = response.getOutputStream(); //ImageIO.setUseCache(false); 有的不加此,会报错 ImageIO.write(image,"png",outputStream);//输出图片流 outputStream.flush(); outputStream.close(); } }