为了提高软件的安全性,应运而生的验证码在一定程度上解决了这个问题,从某种程度来说它降低了程序被攻击的风险。伴随着Java的发展,网上也出现了各种各样的验证码,比如图像、字符验证码、用于计算的验证码等等。下图给大家介绍几个原始验证码的写法:
![78a829c399b228495f316ef690532a0b.png](https://i-blog.csdnimg.cn/blog_migrate/bf2b7ff330c6cb86a54e5fce3c97545d.jpeg)
最左侧的图代表的是基本的验证码,背景和字体颜色随机生成。
中间的图代表的是每个字符都是不同的颜色。
最右侧的图代表的是每个字符都有不同的倾斜角度。
给大家介绍一下验证码的实现原理——前端页面发送请求【使用<img>标签】到后端,后端使用io流写出一张图片,前端页面展示出来。前端代码如下:
![c3445fc2d104aa9d8d92242dd59fac6d.png](https://i-blog.csdnimg.cn/blog_migrate/9bf2abdf245f1d4996f48d6af6bac1d2.png)
前端部分完成过后,就是后台代码实现了,后台画一张图片实际上就跟美术生写生一样,先有一个画板,然后在画板上铺上一张宣纸,再使用画笔在宣纸上进行图像的绘制。
![a50559060533ad6e30b26bf077e93d24.png](https://i-blog.csdnimg.cn/blog_migrate/42a417582a1ea67d4a90ea4c6661ac03.jpeg)
第一部分:获取画板对象,并设置绘画区域:
![85c0901fe2d49ff96589328e4bae1616.png](https://i-blog.csdnimg.cn/blog_migrate/1fc4653f0d0487928239b7e55509ea4e.png)
第二部分:画字符串(随机字符串,随机颜色,随机字体):
![3155527ca1eb41b9b747beb76e1bcf8b.png](https://i-blog.csdnimg.cn/blog_migrate/146639a1c1fdfffb4fea2fcd6bef9586.png)
第三部分:画干扰线和干扰点
![e3f96097cc913c66771c95b9f8a96b67.png](https://i-blog.csdnimg.cn/blog_migrate/f83ea568a4b43b7e53689dc581c5378d.png)
第四部分:画出图片,释放资源
![88787ef690b91d1d11cdaa5f1dad6801.png](https://i-blog.csdnimg.cn/blog_migrate/c8a32d5d1444568e9cb152668d4b799c.png)
其他:自定义的方法:
![aeb9ec30862ba7be754d9bda586bfe27.png](https://i-blog.csdnimg.cn/blog_migrate/4de3995f39e6bbbca3f9bcf731501989.jpeg)
实现不同字符的不同颜色:
![b8fc2c7d08a303f0d9a50116715e34df.png](https://i-blog.csdnimg.cn/blog_migrate/01706b4d8b0bcba591a399478c6212a8.png)
实现不同字符的不同旋转角度:
![219d4e15e9be450957a93d7a9dee5b94.png](https://i-blog.csdnimg.cn/blog_migrate/109fa49bee4a74daf8b407314a5656d6.jpeg)
![32323dcd7b34621e8ae874023dfbf34c.gif](https://i-blog.csdnimg.cn/blog_migrate/45bd9c123c6c2124826531c7ecde1fb9.gif)