博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用java实现验证码(CAPTCHA)
阅读量:6203 次
发布时间:2019-06-21

本文共 8955 字,大约阅读时间需要 29 分钟。

    一、关于验证码

    首先来说,验证码在我们的日常登录,发表言论时比较常见,它是一种用来区分登录用户是人还是机器的一种公共自动程序。它可以防止恶意破解密码、刷票、论坛灌水。

    二、用java来实现验证码

    了解了验证码的作用,接下来我们就用java来实现验证码这一功能。首先我们先分析一下,怎么生成一个验证码。我们需要一个BufferedImage对象来保存图片;通过它来获得Graphics对象;通过Randrom产生随机验证码信息;使用Graphics绘制图片;记录验证码信息到session中;使用ImageIO输出图片;

1 package com.water.servlet; 2  3 import com.sun.javafx.font.FontStrike; 4  5 import javax.imageio.ImageIO; 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 import java.awt.*;11 import java.awt.image.BufferedImage;12 import java.io.IOException;13 import java.util.Random;14 15 public class ImgServlet extends HttpServlet {16     @Override17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {18         BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);19         Graphics graphics = bi.getGraphics();20         Color color = new Color(200, 150, 255);21         graphics.setColor(color);22         graphics.fillRect(0,0,68,32);23         char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();24         StringBuffer sb = new StringBuffer();25         Random random = new Random();26         for (int i = 0; i < 4; i++) {27             char aChar = chars[random.nextInt(36)];28             graphics.setColor(new Color(random.nextInt(88),random.nextInt(188),random.nextInt(255)));29             graphics.drawString(aChar+"",(i*15)+3,18);30             sb.append(aChar);31         }32         req.getSession().setAttribute("charCode",sb.toString());33         ImageIO.write(bi,"jpg",resp.getOutputStream());34 35     }36 }

    写一个 登录页面来检验验证码的正确与否。

1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2  3    4     checkCode 5     11   12   13   
14 验证码:
15
16
看不清楚17
18
19 20 21

    通过验证,我们发现验证码可以正确显示并能实现验证功能。但是在日常中,有着各种各样的验证码:算术类型,文字类型,动画类型,纯数字类型,数字与文字、字母相结合类型等等,那么我们在开发中该怎么实现这些功能呢?

    三、 验证码组件

    我们能够走的更远更扎实,是因为我们站在巨人的肩旁上。我们的前辈们,已经开发了一些很好的组件可供我们使用,比如下面这些:Jcaptcha组件和Kaptcha组件。由于Jcaptcha组件需要和Spring框架结合来使用,我们就先咱不做介绍,我们主要来说一说Kaptcha组件。

    a. 使用之前要先下载(提取密码:1vrf)

    b. 然后是在web.xml中配置它

1 
2
Kaptcha
3
com.google.com.kaptcha.servlet.KaptchaServlet
4
5
6
Kaptcha
7
/randromCode.jpg
8

    Tips:Kaptcha组件还有很多配置选项供我们使用。

1 
2
6 7
8
Kaptcha
9
10 KaptchaServlet 11
12
13
图片边框,合法值:yes , no
14
kaptcha.border
15
yes
16
17
18
19 边框颜色,合法值: r,g,b (and optional alpha) 或者 20 white,black,blue. 21
22
kaptcha.border.color
23
black
24
25
26
边框厚度,合法值:>0
27
kaptcha.border.thickness
28
1
29
30
31
图片宽 200
32
kaptcha.image.width
33
200
34
35
36
图片高 50
37
kaptcha.image.height
38
50
39
40
41
图片实现类
42
kaptcha.producer.impl
43
44 com.google.code.kaptcha.impl.DefaultKaptcha 45
46
47
48
文本实现类
49
kaptcha.textproducer.impl
50
51 com.google.code.kaptcha.text.impl.DefaultTextCreator 52
53
54
55
文本集合,验证码值从此集合中获取
56
kaptcha.textproducer.char.string
57
1234567890
58
59
60
验证码长度 5
61
kaptcha.textproducer.char.length
62
2
63
64
65
字体 Arial, Courier
66
kaptcha.textproducer.font.names
67
Arial, Courier
68
69
70
字体大小 40px.
71
kaptcha.textproducer.font.size
72
40
73
74
75
76 字体颜色,合法值: r,g,b 或者 white,black,blue. 77
78
kaptcha.textproducer.font.color
79
black
80
81
82
文字间隔 2
83
kaptcha.textproducer.char.space
84
2
85
86
87
干扰实现类
88
kaptcha.noise.impl
89
90
91 com.google.code.kaptcha.impl.DefaultNoise 92
93
94
95
96 干扰颜色,合法值: r,g,b 或者 white,black,blue. 97
98
kaptcha.noise.color
99
black
100
101
102
103 图片样式: 水纹com.google.code.kaptcha.impl.WaterRipple104 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy105 阴影com.google.code.kaptcha.impl.ShadowGimpy106
107
kaptcha.obscurificator.impl
108
109 com.google.code.kaptcha.impl.WaterRipple110
111
112
113
背景实现类
114
kaptcha.background.impl
115
116 com.google.code.kaptcha.impl.DefaultBackground117
118
119
120
背景颜色渐变,开始颜色
121
kaptcha.background.clear.from
122
green
123
124
125
背景颜色渐变,结束颜色
126
kaptcha.background.clear.to
127
white
128
129
130
文字渲染器
131
kaptcha.word.impl
132
133 com.google.code.kaptcha.text.impl.DefaultWordRenderer134
135
136
137
138 session中存放验证码的key键139
140
kaptcha.session.key
141
KAPTCHA_SESSION_KEY
142
143
144
145 The date the kaptcha is generated is put into the146 HttpSession. This is the key value for that item in the147 session.148
149
kaptcha.session.date
150
KAPTCHA_SESSION_DATE
151
152
153
154
Kaptcha
155
/randomcode.jpg
156
157 158
View Code

    当我们需要使用那些效果时,我们可以在web.xml中配置它们。

 

转载于:https://www.cnblogs.com/shouming/articles/7362344.html

你可能感兴趣的文章
图解DevExpress RichEditControl富文本的使用,附源码及官方API
查看>>
剖析 Laravel 计划任务--避免重复
查看>>
公司框架遇到的问题
查看>>
详解 Discuz 的 PHP经典加密解密函数 authcode
查看>>
Oracle如何删除表中重复记录
查看>>
nginx 是如何处理访问请求的
查看>>
wget参数用法详解
查看>>
使用curl命令查看访问url的时间
查看>>
python添加环境变量
查看>>
DP-01背包 (题)
查看>>
WinForm中跨线程操作控件
查看>>
CODING 敏捷实践完全指南
查看>>
unittest测试框架和测试报告的输出实例(一)
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>
python 输出当前行号
查看>>
12C -- 配置Application Continuity
查看>>
Flymeos插桩适配教程
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>