网络上有很多上网账号,都带有一定安全性,为什么呢?登陆的时候为什么要写用户名,密码,但是为什么登陆银行账号等涉及机密的账号时,都需要验证码呢?
懂得编程的人都知道正常情况下截取他人的登陆密码是一件非常轻而易举 的事,但是有什么方法能防止他人盗用密码呢?对了,就是用验证码。
验证码真的能防止他人盗取账号及密码吗?现在我告诉你,真的可以。
为什么验证码能防止别人盗用账号及密码呢?这是由于验证码采用的是图片的形式来绘制的。在图片上面加上随机的验证码时,在验证的时候,不是把验证码传到控制器,而是将图片传到控制器,这时候,在控制器端,只需要验证用户名和密码和图片,也就是说,控制端获取到的是图片的对象,而验证码等都是难以获取的。如果验证的图片上再加上删除条纹等,安全系数就更高了。
下面我来做一个简单的验证码的实现。
步骤:
1、建立一个html登陆界面,我做的比较简单,代码:
<html>
<head>
<title>Login.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript">
function getImg(){
var img=document.getElementById("img");
img.src="/servlet/ServletResponseCheckCode?date="+new Date();
}
</script>
</head>
<body>
<form action="" method="post">
用户名:<input type="text" name="user"><br>
密码:<input type="password" name="pwd"><br>
输入验证码:<input type="text"><br/> <img alt="换一张" src="/servlet/ServletResponseCheckCode" id="img" οnclick="getImg()"><a href="javascript:void(0)" οnclick="getImg()">看不清,换一张</a>
<img alt="" src="/photo_02.jpg">
</form>
</body>
</html>
2、建立一个servlet,在doGet方法里面绘制图片验证码
a.获取图片缓冲区
b.通过图片缓冲区获取画笔
c.绘制图片边框、背景等
d.绘制随机数字或者文字
e.通过图片流将图片写入到页面中
关键代码如下:
int width=120;
int height=20;
//获取图片缓存区
BufferedImage bufferedImage=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
//获取画笔工具
Graphics g=bufferedImage.getGraphics();
//设置画笔颜色
g.setColor(Color.red);
//画出矩形框
g.drawRect(0, 0, width, height);
//绘制背景
g.setColor(Color.green);
g.fillRect(1, 1, width-1, height-1);
//产生随机数
Random r=new Random();
g.setColor(Color.red);
for(int x=0;x<4;x++){
g.drawString(r.nextInt(10)+"",20+x*20, 16); }
//创建ImageIO对象
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());