jsp 实现验证码功能

来源:互联网 发布:php数据表统计插件 编辑:程序博客网 时间:2024/05/16 17:45

参考网上例子实现登录验证码功能,生成 jpeg 格式的图片。

jsp:

<div id="loginin"><h3>后台管理系统登录:</h3><form name="loginForm" method="post"><ul><li>用户名:<input type="text" name="username" id="username" /></li><li>密   码:<input type="password" id="password" name="password" /></li><li>验证码:<input type="text" name="yzm" id="yzm" /></li><li><img src="image.jsp" /></li>//此处生成验证码图片</ul><input type="submit" value="登录" name="submit" class="submit" onclick="checkInsert()" />${message}</form></div>

image.jsp:

<%@ page language="java" contentType="image/JPEG"    pageEncoding="gbk"%><%@ page import="java.awt.*, java.awt.image.*, java.util.*, javax.imageio.*" %><%!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) ;}%><%// 设置页面不缓存response.setHeader("Pragma", "No-cache") ;response.setHeader("Cache-Control", "no-cache") ;response.setDateHeader("Expires", 0) ;// 在内存中创建图像int width = 60 ;int height = 20 ;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB) ;// 获取图形上下文Graphics g = image.getGraphics() ;// 生成随机类Random random = new Random() ;// 设定背景色g.setColor(getRandColor(200, 250)) ;g.fillRect(0, 0, width, height) ;// 设置字体g.setFont(new Font("Times New Roman", Font.PLAIN, 18)) ;// 画边框/* g.setColor(Color.red) ;g.drawRect(0, 0, width-1, height-1) ; */// 随机产生 155 条干扰线, 使图像中的验证码不易被其他程序探测到g.setColor(getRandColor(160, 200)) ;for(int i = 0; i < 100; i ++){int x = random.nextInt(width) ;int y = random.nextInt(height) ;int x1 = random.nextInt(40) ;int y1 = random.nextInt(40) ;g.drawLine(x, y, x+x1, y+y1) ;}// 取随机产生的验证码: 4位数String sRand = "" ;int StringX = (width-6)/4 ;int StringY = height-4 ;for(int i = 0; i < 4; i ++) {String rand = String.valueOf(random.nextInt(10)) ;sRand += rand ;// 将验证码显示到图片中g.setColor(new Color(10+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110))) ;g.drawString(rand, StringX*i + 6, StringY) ;}// 将验证码放到 SESSION 中session.setAttribute("system_yzm", sRand) ;//System.out.println("system_yzm: "+sRand) ;// 图像生效g.dispose() ;// 输出图像到页面ImageIO.write(image, "JPEG", response.getOutputStream()) ;out.clear() ;out = pageContext.pushBody() ;%>


0 0
原创粉丝点击