SpringBoot–集成验证码kaptcha实现验证码功能SpringBoot–集成验证码kaptcha实现验证码功能
配置文件详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | spring.kaptcha.properties.kaptcha.textproducer.char.string=0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ spring.kaptcha.properties.kaptcha.textproducer.char.length=4 spring.kaptcha.properties.kaptcha.border=no spring.kaptcha.properties.kaptcha.image.width=80 spring.kaptcha.properties.kaptcha.image.height=35 spring.kaptcha.properties.kaptcha.border.color=105,179,90 spring.kaptcha.properties.kaptcha.textproducer.font.color=blue spring.kaptcha.properties.kaptcha.textproducer.font.size=30 spring.kaptcha.properties.kaptcha.textproducer.font.names=宋体,宋体,宋体,宋体 spring.kaptcha.properties.kaptcha.obscurificator.impl=com.google.code.kaptcha.impl.WaterRipple spring.kaptcha.properties.kaptcha.session.key=code spring.kaptcha.properties.kaptcha.noise.color=white spring.kaptcha.properties.kaptcha.background.clear.from=white spring.kaptcha.properties.kaptcha.background.clear.to=white
#kaptcha.border 是否有边框 默认为true 我们可以自己设置yes,no #kaptcha.border.color 边框颜色 默认为Color.BLACK #kaptcha.border.thickness 边框粗细度 默认为1 #kaptcha.producer.impl 验证码生成器 默认为DefaultKaptcha #kaptcha.textproducer.impl 验证码文本生成器 默认为DefaultTextCreator #kaptcha.textproducer.char.string 验证码文本字符内容范围 默认为abcde2345678gfynmnpwx #kaptcha.textproducer.char.length 验证码文本字符长度 默认为5 #kaptcha.textproducer.font.names 验证码文本字体样式 默认为newFont("Arial",1,fontSize),newFont("Courier",1,fontSize) #kaptcha.textproducer.font.size 验证码文本字符大小 默认为40 #kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACK #kaptcha.textproducer.char.space 验证码文本字符间距 默认为2 #kaptcha.noise.impl 验证码噪点生成对象 默认为DefaultNoise #kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK #kaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipple #kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer #kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground #kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY #kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE #kaptcha.image.width 验证码图片宽度 默认为200 #kaptcha.image.height 验证码图片高度 默认为50 |
问题:如何通过SpringBoot集成验证码kaptcha实现验证码功能?
新建一个Java的Maven项目,项目名字为:springboot-sample-kaptcha
引入依赖的Jar包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
<!-- 验证码 --> <dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version> </dependency>
</dependencies> |
生成验证码样式的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Bean publicDefaultKaptcha captchaProducer(){ DefaultKaptcha captchaProducer=newDefaultKaptcha(); Properties properties=newProperties(); 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.textproducer.font.size","45"); properties.setProperty("kaptcha.session.key","code"); properties.setProperty("kaptcha.textproducer.char.length","4"); properties.setProperty("kaptcha.textproducer.font.names","宋体,楷体,微软雅黑"); Config config=newConfig(properties); captchaProducer.setConfig(config); return captchaProducer; } |
生成验证码的控制类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | packagecom.souvc;
importjava.awt.image.BufferedImage;
importjavax.imageio.ImageIO; importjavax.servlet.ServletOutputStream; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession;
importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.servlet.ModelAndView;
importcom.google.code.kaptcha.Constants; importcom.google.code.kaptcha.Producer;
@Controller @RequestMapping("/kaptcha/*") publicclassCaptchaController{
@Autowired privateProducer captchaProducer;
@RequestMapping publicModelAndView getKaptchaImage(HttpServletRequest request,HttpServletResponse response)throwsException{ HttpSession session=request.getSession(); Stringcode=(String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY); System.out.println("******************验证码是: "+code+"******************");
response.setDateHeader("Expires",0);
// Set standard HTTP/1.1 no-cache headers. response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader). response.addHeader("Cache-Control","post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header. response.setHeader("Pragma","no-cache");
// return a jpeg response.setContentType("image/jpeg");
// create the text for the image StringcapText=captchaProducer.createText();
// store the text in the session session.setAttribute(Constants.KAPTCHA_SESSION_KEY,capText);
// create the image with the text BufferedImage bi=captchaProducer.createImage(capText); ServletOutputStream out=response.getOutputStream();
// write the data out ImageIO.write(bi,"jpg",out); try{ out.flush(); }finally{ out.close(); } returnnull; }
} |
访问链接:http://127.0.0.1:8080/kaptcha/getKaptchaImage 可以进行测试。刷新浏览器重新获取验证码。
如果其他地方需要获取验证码进行判断,可以通过获取session中验证码的key值。
1 2 3 | HttpSession session=request.getSession(); Stringcode=(String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY); System.out.println("******************验证码是: "+code+"******************"); |
当然也可以写在配置文件中,不过得看修改的频度了。