springboot 集成kaptcha验证码简单实例
来源:互联网 发布:看店宝软件 编辑:程序博客网 时间:2024/04/30 05:11
在一个web应用中验证码是一个常见的元素。不管是防止机器人还是爬虫都有一定的作用,我们是自己编写生产验证码的工具类,也可以使用一些比较方便的验证码工具。在网上收集一些资料之后,今天给大家介绍一下kaptcha的和springboot一起使用的简单例子。
准备工作:
1.你要有一个springboot的hello world的工程,并能正常运行。
2.导入kaptcha的maven:
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>
开始实验:
我们有两种方式在springboot中使用kaptcha
第一种使用.xml的配置方式配置生成kaptcha的bean对象,在启动类上@ImportResource这个xml文件;在controller中注入其对象并使用
第二种是把kaptcha作为工程的一个类,加上@component注解在返回kaptcha的方法中加上@Bean注解,再在controller中注入其对象。
第一种方法:
在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>
在springboot启动类上引入这个文件
@SpringBootApplication@ImportResource(locations={"classpath:mykaptcha.xml"})public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
@AutowiredDefaultKaptcha defaultKaptcha;
......
@RequestMapping("/defaultKaptcha")public void defaultKaptcha(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) throws Exception{ byte[] captchaChallengeAsJpeg = null; ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { //生产验证码字符串并保存到session中 String createText = defaultKaptcha.createText(); httpServletRequest.getSession().setAttribute("vrifyCode", createText); //使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中 BufferedImage challenge = defaultKaptcha.createImage(createText); ImageIO.write(challenge, "jpg", jpegOutputStream); } catch (IllegalArgumentException e) { httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } //定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组 captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); }
验证的方法:
@RequestMapping("/imgvrifyControllerDefaultKaptcha")public ModelAndView imgvrifyControllerDefaultKaptcha(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){ModelAndView andView = new ModelAndView(); String captchaId = (String) httpServletRequest.getSession().getAttribute("vrifyCode"); String parameter = httpServletRequest.getParameter("vrifyCode"); System.out.println("Session vrifyCode "+captchaId+" form vrifyCode "+parameter); if (!captchaId.equals(parameter)) {andView.addObject("info", "错误的验证码");andView.setViewName("index");} else {andView.addObject("info", "登录成功");andView.setViewName("succeed");}return andView;}模板html:
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" /> <title>hello</title></head><body><h1 th:text="${info}" /> <div> <!-- <img alt="这是图片" src="/img/001.png"/> --> <img alt="验证码" onclick = "this.src='/defaultKaptcha?d='+new Date()*1" src="/defaultKaptcha" /> </div> <form action="imgvrifyControllerDefaultKaptcha"> <input type="text" name="vrifyCode" /> <input type="submit" value="提交"></input> </form></body></html>启动并访问:
提交:
第二中方发:
这种方法把.xml文件换成使用代码来配置:
KaptchaConfig.java:
import java.util.Properties;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;@Componentpublic class KaptchaConfig {@Beanpublic DefaultKaptcha getDefaultKaptcha(){com.google.code.kaptcha.impl.DefaultKaptcha defaultKaptcha = new com.google.code.kaptcha.impl.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", "110");properties.setProperty("kaptcha.image.height", "40");properties.setProperty("kaptcha.textproducer.font.size", "30");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;}}
注意要去掉启动类中引入的.xml文件,不然会有两个相同的对象,而你没有指明要注入哪一个的话启动会失败。
启动并测试:
到这里就算成功了。(也有使用jcaptcha的,只是他们最好不要再一个工程中使用,使用到了相同的类,有时候会导致异常。)
补充:对于kaptcha的配置属性大家可以找找,根据属性就可以配置了。
0 0
- springboot 集成kaptcha验证码简单实例
- springboot集成kaptcha验证码
- SpringBoot中集成kaptcha验证码
- SpringBoot–集成验证码kaptcha实现验证码功能
- Springboot 集成kaptcha验证码 (图片转base64)
- springboot实现kaptcha验证码
- kaptcha验证码组件实例
- 验证码 kaptcha之springboot用法
- 验证码 kaptcha之springboot用法
- 使用Kaptcha实现简单的验证码
- springboot集成验证码功能
- kaptcha验证码使用
- kaptcha验证码使用
- kaptcha验证码使用
- Java 验证码 kaptcha
- kaptcha验证码使用
- kaptcha中文验证码
- kaptcha验证码使用
- 哈希链表
- python_Django_4:Forms and generic views
- 1042. Shuffling Machine (20)
- 第3章 数学函数、字符串和对象
- 浅谈数据权限
- springboot 集成kaptcha验证码简单实例
- 写在前面
- 运筹学之动态规划之背包问题
- 16位卡号输入框,每4位添加一个空格
- 博为峰Java技术文章 ——JavaSE 如何创建JFileChooser对话框
- ArcGIS Server3.20视域分析GP服务的发布过程
- HDU
- hdu 4055 Number String
- hibernate-croe-5.1.5与5.2.10与5.0.12版本环境问题