前言
Kaptcha是我项目中在用的一个验证码产生工具,产生的验证码比较漂亮且可定制程度比较高,所以很好用。
可配置的项目如下:
- 字体
- 字体的大小
- 字体颜色
- 验证码内容的范围(数字,字母,中文汉字!)
- 验证码图片的大小,边框,边框粗细,边框颜色
- 验证码的干扰线
- 验证码的样式(鱼眼样式、3D、普通模糊...)
生成的验证码示例:
使用
如果是Maven,加入pom.xml:
<dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version> </dependency>
如果是Gradle,加入build.gradle
implementation("com.google.code.kaptcha:kaptcha:2.3")
新建KaptchaController.java
生成的captcha验证码的文本,存在session的com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY里面,下一次用户提交验证码,只要从session里取出key:com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY,和用户输入的对比就可以了
package com.terrynow.test.controller; import com.google.code.kaptcha.Producer; import com.google.code.kaptcha.servlet.KaptchaExtend; import com.google.code.kaptcha.util.Config; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Properties; import static com.google.code.kaptcha.Constants.*; /** * @description These values are stored in the com.google.code.kaptcha.Constants class. * <p> * Constant Description Default * kaptcha.border Border around kaptcha. Legal values are yes or no. yes * kaptcha.border.color Color of the border. Legal values are r,g,b (and optional alpha) or white,black,blue. black * kaptcha.border.thickness Thickness of the border around kaptcha. Legal values are > 0. 1 * kaptcha.image.width Width in pixels of the kaptcha image. 200 * kaptcha.image.height Height in pixels of the kaptcha image. 50 * kaptcha.producer.impl The image producer. com.google.code.kaptcha.impl.DefaultKaptcha * kaptcha.textproducer.impl The text producer. com.google.code.kaptcha.text.impl.DefaultTextCreator * kaptcha.textproducer.char.string The characters that will create the kaptcha. abcde2345678gfynmnpwx * kaptcha.textproducer.char.length The number of characters to display. 5 * kaptcha.textproducer.font.names A list of comma separated font names. Arial, Courier * kaptcha.textproducer.font.size The size of the font to use. 40px. * kaptcha.textproducer.font.color The color to use for the font. Legal values are r,g,b. black * kaptcha.textproducer.char.space The space between the characters 2 * kaptcha.noise.impl The noise producer. com.google.code.kaptcha.impl.DefaultNoise * kaptcha.noise.color The noise color. Legal values are r,g,b. black * kaptcha.obscurificator.impl The obscurificator implementation. com.google.code.kaptcha.impl.WaterRipple * kaptcha.background.impl The background implementation. com.google.code.kaptcha.impl.DefaultBackground * kaptcha.background.clear.from Starting background color. Legal values are r,g,b. light grey * kaptcha.background.clear.to Ending background color. Legal values are r,g,b. white * kaptcha.word.impl The word renderer implementation. com.google.code.kaptcha.text.impl.DefaultWordRenderer * kaptcha.session.key The value for the kaptcha is generated and is put into the HttpSession. This is the key value for that item in the session. KAPTCHA_SESSION_KEY * kaptcha.session.date The date the kaptcha is generated is put into the HttpSession. This is the key value for that item in the session. KAPTCHA_SESSION_DATE */ @Controller public class KaptchaController extends KaptchaExtend { //--kaptcha验证码设置参数 private Properties props = new Properties(); private Producer kaptchaProducer = null; public KaptchaController() { ImageIO.setUseCache(false); this.props.put(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); this.props.put(KAPTCHA_TEXTPRODUCER_CHAR_STRING, "1234567890"); this.props.put(KAPTCHA_BORDER, "no"); this.props.put(KAPTCHA_IMAGE_WIDTH, "300"); this.props.put(KAPTCHA_IMAGE_HEIGHT, "100"); this.props.put(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "80"); Config config1 = new Config(this.props); this.kaptchaProducer = config1.getProducerImpl(); } @RequestMapping({"/captcha.jpg", "**/captcha.jpg"}) public void captcha(HttpServletResponse response, HttpSession session) throws IOException { // flush it in the response response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); String capText = this.kaptchaProducer.createText(); BufferedImage bi = this.kaptchaProducer.createImage(capText); ServletOutputStream responseOutputStream = response.getOutputStream(); // 本次产生的验证码文本存在session里,下次用户提交的时候,从session里取出后,和用户输入的对比来判断验证码是否正确 session.setAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY, capText); ImageIO.write(bi, "jpeg", responseOutputStream); // 以下关闭输入流! responseOutputStream.flush(); responseOutputStream.close(); } }
上面代码里有英文关于验证码操作的介绍,这边翻译下整理如下:
com.google.code.kaptcha.Constants的参数如下
KEY | 说明 | 默认值 |
kaptcha.border | 图片边框,合法值:yes , no | yes |
kaptcha.border.color | 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. | black |
kaptcha.image.width | 图片宽 | 200 |
kaptcha.image.height | 图片高 | 50 |
kaptcha.producer.impl | 图片实现类 | com.google.code.kaptcha.impl.DefaultKaptcha |
kaptcha.textproducer.impl | 文本实现类 | com.google.code.kaptcha.text.impl.DefaultTextCreator |
kaptcha.textproducer.char.string | 文本集合,验证码值从此集合中获取 | abcde2345678gfynmnpwx |
kaptcha.textproducer.char.length | 验证码长度 | 5 |
kaptcha.textproducer.font.names | 字体 | Arial, Courier |
kaptcha.textproducer.font.size | 字体大小 | 40px. |
kaptcha.textproducer.font.color | 字体颜色,合法值: r,g,b 或者 white,black,blue. | black |
kaptcha.textproducer.char.space | 文字间隔 | 2 |
kaptcha.noise.impl | 干扰实现类 | com.google.code.kaptcha.impl.DefaultNoise |
kaptcha.noise.color | 干扰 颜色,合法值: r,g,b 或者 white,black,blue. | black |
kaptcha.obscurificator.impl | 图片样式: | com.google.code.kaptcha.impl.WaterRipple |
水纹 | ||
com.google.code.kaptcha.impl.WaterRipple | ||
鱼眼 | ||
com.google.code.kaptcha.impl.FishEyeGimpy | ||
阴影 | ||
com.google.code.kaptcha.impl.ShadowGimpy | ||
kaptcha.background.impl | 背景实现类 | com.google.code.kaptcha.impl.DefaultBackground |
kaptcha.background.clear.from | 背景颜色渐变,开始颜色 | light grey |
kaptcha.background.clear.to | 背景颜色渐变, 结束颜色 | white |
kaptcha.word.impl | 文字渲染器 | com.google.code.kaptcha.text.impl.DefaultWordRenderer |
kaptcha.session.key | session key | KAPTCHA_SESSION_KEY |
kaptcha.session.date | session date | KAPTCHA_SESSION_DATE |
网页上输出并更换验证码,简单示例不多做介绍:
<img id="captcha" src="/captcha" style="cursor: pointer;" title="点击换一张" /> $(function () { // 刷新验证码,这个根据所使用的JS框架自由实现 $("#captcha").click(function () { $(this).hide().attr('src', '/captcha?r=' + Math.random()).fadeIn(); }); });
文章评论
Fqwvit Acheter Cialis Doctissimo buy viagra cialis online L Thyroxin Kaufen Gfvoco cialis super active akgimages Erich Lessing. Fpprzj