<h3>带有验证码的登录页面</h3>
<form action="servlet/LogonFormServlet" method="post">
用户名:<input type="text" name="name"><br>
密码:<input type="password" name="pass"><br>
验证码:<input type="text" name="check_code">
<img src="servlet/CheckCodeServlet"><br>
<input type="submit" value="登录">
</form>
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
public class CheckCodeServlet extends HttpServlet
{
private static int WIDTH=60;
private static int HEIGHT=20;
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
HttpSession session = request.getSession();
response.setContentType("image/jpeg");
ServletOutputStream sos=response.getOutputStream();
//设置浏览器不要缓存此图片
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//创建内容图片并获得其图形上下文
BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//产生随机的验证码
char[] rands=generateCheckCode();
//产生图像
drawBackground(g);
drawRands(g,rands);
//结束图像的绘制过程,完成图像
g.dispose();
//将图像输出到客户端
ByteArrayOutputStream bos=new ByteArrayOutputStream();
ImageIO.write(image,"JPEG",bos);
byte[] buf=bos.toByteArray();
response.setContentLength(buf.length);
//下面的语句也可以写成:bos.writeTo(sos);
sos.write(buf);
bos.close();
sos.close();
//将当前验证码存入到session中
session.setAttribute("check_code",new String(rands));
}
private char[] generateCheckCode()
{
//定义验证码的字符表
String chars="0123456789abcdefghijklmnopqrstuvwxyz";
char[] rands=new char[4];
for(int i=0;i<4;i++)
{
int rand=(int)(Math.random()*36);
rands[i]=chars.charAt(rand);
}
return rands;
}
private void drawRands(Graphics g,char[] rands)
{
g.setColor(Color.BLACK);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));
//在不同的高度上输出验证码的每个字符
g.drawString(""+rands[0],1,17);
g.drawString(""+rands[1],16,15);
g.drawString(""+rands[2],31,87);
g.drawString(""+rands[3],46,16);
System.out.println(rands);
}
private void drawBackground(Graphics g)
{
//画背景
g.setColor(new Color(0xDCDCDC));
g.fillRect(0,0,WIDTH,HEIGHT);
//随即产生120个干扰点
for(int i=0;i<120;i++)
{
int x=(int)(Math.random()*WIDTH);
int y=(int)(Math.random()*HEIGHT);
int red=(int)(Math.random()*255);
int green=(int)(Math.random()*255);
int blue=(int)(Math.random()*255);
g.setColor(new Color(red,green,blue));
g.drawOval(x,y,1,0);
}
}
}
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogonFormServlet extends HttpServlet
{
public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html;charset=GB2312");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession(false);
if(session==null)
{
out.println("验证码处理问题!");
return ;
}
String savedCode=(String)session.getAttribute("check_code");
if(savedCode==null)
{
out.println("验证码处理问题!");
return ;
}
String checkCode=request.getParameter("check_code");
if(!savedCode.equals(checkCode))
{
/*验证码未通过,不从session中清楚原来的验证码,
以便用户可以后退回登录页面继续使用原来的验证码进行登录*/
out.println("验证码无效!");
return ;
}
/*验证码检查通过后,从session中清楚原来的验证码,
以防用户后退回登录页面继续使用原来的验证码进行登录*/
session.removeAttribute("check_code");
out.println("验证码通过,服务器正在校验用户名和密码!");
}
}
分享到:
相关推荐
UI框架对canvas进行分层 1.base为基础层,放基础界面,主游戏菜单、操作杆、小地图等; 2.main为主业务层,放全部业务界面,背包、榜单等 3.toast层,放吐司 4.loading层,放loading界面 使用方式: 1.在场景中挂上UIManager脚本,并在游戏启动时进行初始化,传入资源加载器 2.显示界面直接UIManager.ShowPanel<T>(),不需要其他操作 3.隐藏界面UIManager.ClosePanel()
IMG_1399.PNG
【毕业设计】java-springboot-vue教师工作量管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
python教程学习
【深圳来觅数据信息科技-2025研报】减产提价!多重因素影响,国内存储芯片逐步崛起.pdf
python学习资源
本协力服装厂服装生产管理系统设计目标是实现协力服装厂服装生产的信息化管理,提高管理效率,使得协力服装厂服装生产管理作规范化、科学化、高效化。 本文重点阐述了协力服装厂服装生产管理系统的开发过程,以实际运用为开发背景,基于Springboot框架,运用了Java编程语言和MYSQL数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了服装生产相关信息管理的重要功能。 本协力服装厂服装生产管理系统运行效果稳定,操作方便、快捷,界面友好,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的服装生产管理平台。 关键词:服装生产管理,Java编程语言,Springboot框架,MYSQL数据库
网络编程,资源和大家上学的时候的差不多,tcp
vmware虚拟机安装教程
【毕业设计】java-springboot-vue教师人事档案管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计-java】springboot-vue会员制医疗预约服务管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
比赛前开源题目
UniApp开发一个简单的记事本应用文字教程
内容概要:本文档详细介绍了C#编程语言的基础知识和高级特性的相关内容。首先阐述了C#语言的特点和应用场景,涵盖其简单、安全及面向对象三大优点。接着讲述了准备工作的关键步骤,重点提及了开发工具Visual Studio的安装以及推荐的经典书籍和学习资源。文档深入解析了C#基础语法的各个要素,包括数据类型、变量与常量、运算符、控制结构,并结合代码实例强化理解。面向对象编程部分,文档讲解了类与对象的概念,以及继承、多态和封装的原则,并附带具体示例说明,以便读者更容易理解面向对象的理念。此外,文档对比了.NET Framework和.NET Core两大框架的区别和优势,并介绍了一些常用的类库,使开发者在不同平台环境下都可以顺利开发高质量的软件。最后一章提供了一些建议和资源推荐,如参与开源项目、加入技术社区等,为学习者的成长之路指明方向。 适合人群:希望初次接触C#编程的人士、希望通过系统学习达到掌握C#的初级开发者,亦适用于有一定C#经验,想巩固和提升面向对象思想及相关技术的专业技术人员。 使用场景及目标:该文章可以帮助初学者建立完整的C#编程基础框架,快速上手机编程,并引导他们深入了解面向
仅供资料参考,YeeCOM移讯通DTU连接OneNet平台MQTT说明使用手册。
python学习一些项目和资源
python学习资源
【毕业设计-java】springboot-vue家具销售电商平台实现源码(完整前后端+mysql+说明文档+LunW).zip
python学习教程
【毕业设计-java】springboot-vue健身房私人健身与教练预约管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip