网页验证码的实现
来源:互联网 发布:ssh建立连接的端口号 编辑:程序博客网 时间:2024/05/20 10:23
登陆页面需要输入验证码
需要实现的效果:如果看不清,点击验证码图片进行更换。
首先需要页面需要有验证码放的地方。
<tr> <th> 验证码: </th> <td> <span class="fieldSet"> <input type="text" id="code" name="code" class="text captcha" maxlength="4" autocomplete="off"> <img id="captchaImage" class="captchaImage" src="checkImg" onclick="this.src='checkImg?id='+Math.random()" title="点击更换验证码"> </span> <s:fielderror></s:fielderror> </td></tr>
这里需要注意的是,onclick方法是:checkImg?id=’+Math.random()’就是通过随机数从而实现每次的验证码都不相同。
checkImg只是Struts2.xml中一个action的名字,这个随意。
xml文件中是这样写的:
checkImgAction这个页面代码如下:
package mancs;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 验证码Action类 * * @author * */public class CheckImgAction extends ActionSupport { @Override public String execute() throws Exception { int width = 120; int height = 30; // 步骤一 绘制一张内存中图片 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 步骤二 图片绘制背景颜色 ---通过绘图对象 Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔 // 绘制任何图形之前 都必须指定一个颜色 graphics.setColor(getRandColor(200, 250)); graphics.fillRect(0, 0, width, height); // 步骤三 绘制边框 graphics.setColor(Color.WHITE); graphics.drawRect(0, 0, width - 1, height - 1); // 步骤四 四个随机数字 Graphics2D graphics2d = (Graphics2D) graphics; // 设置输出字体 graphics2d.setFont(new Font("宋体", Font.BOLD, 18)); String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; Random random = new Random();// 生成随机数 // 定义StringBuffer StringBuffer sb = new StringBuffer(); // 定义x坐标 int x = 10; for (int i = 0; i < 4; i++) { // 随机颜色 graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); // 旋转 -30 --- 30度 int jiaodu = random.nextInt(60) - 30; // 换算弧度 double theta = jiaodu * Math.PI / 180; // 生成一个随机数字 int index = random.nextInt(words.length()); // 生成随机数 0 到 length - 1 // 获得字母数字 char c = words.charAt(index); sb.append(c); // 将c 输出到图片 graphics2d.rotate(theta, x, 20); graphics2d.drawString(String.valueOf(c), x, 20); graphics2d.rotate(-theta, x, 20); x += 30; } // 将生成的字母存入到session中 ServletActionContext.getRequest().getSession() .setAttribute("checkcode", sb.toString()); // 步骤五 绘制干扰线 graphics.setColor(getRandColor(160, 200)); int x1; int x2; int y1; int y2; for (int i = 0; i < 30; i++) { x1 = random.nextInt(width); x2 = random.nextInt(12); y1 = random.nextInt(height); y2 = random.nextInt(12); graphics.drawLine(x1, y1, x1 + x2, x2 + y2); } // 将上面图片输出到浏览器 ImageIO graphics.dispose();// 释放资源 ImageIO.write(bufferedImage, "jpg", ServletActionContext.getResponse() .getOutputStream()); return NONE; } /** * 取其某一范围的color * * @param fc * int 范围参数1 * @param bc * int 范围参数2 * @return Color */ private Color getRandColor(int fc, int bc) { // 取其随机颜色 Random random = new Random(); if (fc > 255) { fc = 255; } if (bc > 255) { bc = 255; } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); }}
阅读全文
1 0
- 网页验证码的实现
- JAVA网页图片验证码的实现
- [PHP] 网页验证码的实现
- .net实现网页验证码
- Java实现网页验证码
- java网页验证码实现
- 网页验证码简单实现
- 关于网页验证码图片点击刷新的实现
- Net(C#)实现网页验证码功能
- 疯狂java java实现网页验证码
- 使用Servlet实现网页验证码功能
- 网页验证码 (粗略功能实现)
- js实现网页验证码功能
- 实现网页随机登陆验证码功能
- java实现网页的验证码的改良版(火狐可点击刷新)
- 用c++实现获取ie网页的验证码图片识别后输入到验证码框
- GetAlpha:C#实现获取网页验证码图片,并识别出其中的字母
- 基于C#和JavaScript的网页验证码优化实现方式(不用Session和Cookie)
- 升级Glibc2.14的坑爹记录
- cmd下javac 错误: 编码GBK的不可映射字符
- sku组合查询算法探讨-之JS实现示例
- 士兵队列训练问题
- [5-03]事务和连接池
- 网页验证码的实现
- Java爬虫(三)--数据抽取
- tabbar 设置背景图片
- PageRank及其用python在spark中实现
- pycharm的updating indices
- JNI DETECTED ERROR IN APPLICATION:java.lang.SecurityExceptionandroid--解决JNI安全权限异常
- boost.asio
- [转]数据链路层的MAC和LLC子层的区别
- android 加载网络图片实现圆角方法