验证码

1、这里是生成验证码的封装*:可以在需要的时候直接调用工具包,比较方便*
package com.utils;
/**

  • 工具类:将生成的验证码封装到工具类
    */
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.util.Random;

import javax.servlet.http.HttpSession;

public class MyUtils {
/**
* 生成验证码
* @param session
* @return
/
public static BufferedImage createImageCode(HttpSession session) {
//创建图片缓冲对象
BufferedImage bi = new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);
//通过图片缓冲对象获取画笔
Graphics g = bi.getGraphics();
//设置画笔颜色(默认是白色)
g.setColor(new Color(200,188,255));
//把颜色填充到画布指定位置和大小
g.fillRect(0,0,68,22);
//创建一个随机对象
Random r = new Random();
//随机产生干扰线,使图象中的认证码不易被其它程序探测到。
g.setColor(Color.BLACK);
for (int i = 0; i < 50; i++) {
int x = r.nextInt(68);
int y = r.nextInt(22);
int xl = r.nextInt(5);
int yl = r.nextInt(5);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//x,y 为起点的坐标,x + xl, y + yl为终点的坐标
g.drawLine(x, y, x + xl, y + yl);
}
//准备一个字符数组(用于随机生成的验证码字符)
char[] c = “QWERTYUIOPASDFGHJKLZXCVBNM1234567890”.toCharArray();
//用于存放生成的验证码字符
StringBuffer s = new StringBuffer();
//随机生成4个字符
for(int i = 0,len = c.length;i < 4;i++) {
//获取随机下标
int index = r.nextInt(len);
//设置画笔颜色
g.setColor(new Color(r.nextInt(80),r.nextInt(150),r.nextInt(200)));
//说把字符画到画布指定的位置
g.drawString(c[index]+"",4+i
15,18);
//把生成的字符存到字符串缓冲区备用
s.append(c[index]);
}

	session.setAttribute("code",s.toString());
	return bi;
	}

}

2、在这里举一个例子:一般在登录页面设置验证码
我们写一个登录页面
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

用户登录
验证码:
验证码 换一张

3、生成的验证码以图片的形式传入

<%@page import=“javax.imageio.ImageIO”%>
<%@page import=“com.sun.prism.Image”%>
<%@page import=“com.utils.*”%>
<%@page import=“java.awt.image.BufferedImage”%>
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here <% //获取生成的验证码图形的缓冲对象 BufferedImage bi = MyUtils.createImageCode(session); //把图形缓冲对象以jpg格式的形式输出到指定流 ImageIO.write(bi, "jpg", response.getOutputStream()); //清空流 out.clear(); //更新pageContext范围内out对象 out = pageContext.pushBody(); %>

4、对登录页面(这里只有验证码)的处理
如果只是验证验证码是否有效,可以转到success.jsp页面,或者error.jsp页面
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here

<%
//设置字符编码
request.setCharacterEncoding(“UTF-8”);
response.setCharacterEncoding(“UTF-8”);
//校验验证码
String code1 = request.getParameter(“code”);
String code2 = (String)session.getAttribute(“code”);
if(code1.equals(code2)){
//失败,任务继续,转发到login.jsp页面
response.sendRedirect(“successful.jsp”);
return;
}else{
out.println(“验证码不正确!”);
}
%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值