永发信息网

JSP验证码的问题

答案:3  悬赏:60  手机版
解决时间 2021-07-18 09:04
  • 提问者网友:贪了杯
  • 2021-07-17 09:58

verifycode.jsp:

<%@ page contentType="image/jpeg" %>
<%@ page import="java.awt.*, java.awt.image.*" %>
<%@ page import="java.util.*, javax.imageio.*" %>

<%!
//生成随机颜色
Color getRandomColor(int fc, int bc)
{
Random r = new Random();
if(fc > 255)
fc = 255;
if(bc > 255)
bc = 255;
int red = fc + r.nextInt(bc - fc);
int green = fc + r.nextInt(bc - fc);
int blue = fc + r.nextInt(bc - fc);

return new Color(red, green, blue);
}
%>

<%
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

//创建随机类
Random r = new Random();

//在内存中创建图像,宽度为width, 高度为height
int width = 60;
int height = 20;
BufferedImage pic = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//获取图形上下文环境
Graphics gc = pic.getGraphics();

//设定背景色并填充
gc.setColor(getRandomColor(200, 250));
gc.fillRect(0, 0, width, height);

//设定图形上下文字体
gc.setFont(new Font("Times New Roman", Font.PLAIN, 18));

//随机产生200条干扰直线
gc.setColor(getRandomColor(160, 200));
for(int i = 0; i < 200; ++i)
{
int x1 = r.nextInt(width);
int y1 = r.nextInt(height);
int x2 = r.nextInt(15);
int y2 = r.nextInt(15);
gc.drawLine(x1, y1, x1+x2, y1+y2);
}

//随机产生100个干扰点
gc.setColor(getRandomColor(120, 240));
for(int i = 0; i < 100; ++i)
{
int x = r.nextInt(width);
int y = r.nextInt(height);
gc.drawOval(x, y, 0, 0);
}

//随机产生4位数字的验证码
String RS = "";
String rn = "";
for(int i = 0; i < 4; ++i)
{
rn = String.valueOf(r.nextInt(10));
RS += rn;

gc.setColor(new Color(20 + r.nextInt(110), 20 + r.nextInt(110), 20 + r.nextInt(110)));
gc.drawString(rn, 13* i + 6, 16);
}

//释放图形上下文环境
gc.dispose();

//将认证码RS存入session
session.setAttribute("random", RS);

//输出生成的验证码图像
ImageIO.write(pic, "jpeg", response.getOutputStream());
%>

上面是显示验证码的信息。

调用:<img alt="" src="verifycode.jsp"/>,我是想知道,怎么判断文本档的内容与验证码是否相等,

最佳答案
  • 五星知识达人网友:过活
  • 2021-07-17 10:46

//获取页面用户输入的验证码
String checkcode = request.getParameter("checkcode");
//获取jsp动态生成的验证码
String rand = (String)request.getSession().getAttribute("rand");

//对比两个验证码
//如果输入的验证码不正确,返回登陆页面
if(!checkcode.equals(rand)) {
//第一种方案 保存验证码出错提示信息
// request.getSession().setAttribute("checkCodeError", "您输入的验证码不正确!,请重新输入!");
//跳转到登陆页面
// response.sendRedirect("login.jsp");
//第二种方案 不用保存验证码出错提示信息
response.sendRedirect("checkeCodeError.jsp");
}
//如果用户输入的验证码正确,则进行业务逻辑的处理
else {


//做你该做的吧!
}

全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-07-17 12:29
生成的验证码存到session中,然后再从session中取出和输入的验证码比较
  • 2楼网友:鱼忧
  • 2021-07-17 12:19
直接判断session.setAttribute("random", RS)是否和你的输入相同就可以了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯