java session验证码_利用session实现一次性验证码
带有验证码的登录页面
用户名:
密码:
验证码:
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("验证码通过,服务器正在校验用户名和密码!");
}
}
分享到:
2009-01-07 15:14
浏览 1237
评论
1 楼
wenniuwuren
2012-04-01
不能显示图片..
java session验证码_利用session实现一次性验证码相关推荐
- java captcha 验证码_利用开源组件制作验证码 Captcha
jsp验证码制作 介绍两个功能强大的开源制作验证码组件SimpleCaptcha,JCAPTCHA. 1.配置 将下载的jar文件放置工程的lib目录下,打开工程的web.xml文件加上相应的配置 C ...
- java invoke 泛型_利用Java反射机制和泛型,全自动解析json
有啦这个简直,太爽啦, 利用Java 反射机制,利用Class 就可以得到 类的 变量 Field[] fields=cls.getDeclaredFields(); 还可以通过类中 的方法名字 去 ...
- 验证码识别 java 深度学习_使用深度学习识别验证码注解
前言 在抓取一些网站的时候难免会遇到一些验证码.想起去年接触过一段时间的验证码识别技术,所以把之前使用的开源的cnn识别再拿出来做个注解.加深理解,也方便以后的使用.希望能对大家有所帮助! 正文 网上 ...
- java 发送邮件昵称_利用JavaMail发送QQ邮件
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- java post 注册_利用JAVA发送POST请求(垃圾注册就是这么产生的) | 学步园
大伙都知道利用JAVA的net包的URL类和 URLConnection可以得到网页源代码(这个应该是蜘蛛程序的锥形吧),但是向网页发送数据怎么办呢,GET请求很好处理,直接在网址后面加参数就可以了, ...
- java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用
在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...
- java 实现网络通信_利用Java怎么样实现网络通信功能
利用Java怎么样实现网络通信功能 发布时间:2020-11-20 15:19:04 来源:亿速云 阅读:72 作者:Leah 利用Java怎么样实现网络通信功能?相信很多没有经验的人对此束手无策,为 ...
- java jmap 分析_利用java虚拟机的工具jmap分析java内存情况
有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...
- java jstack 死锁_利用jstack检测死锁DeadLock
首先,制造一个死锁程序如下: public class testJstack { final static Object obj_1 = new Object(); final static Obje ...
最新文章
- React 虚拟Dom 转成 真实Dom 实现原理
- 2019以太坊开发者及应用峰会(北京)
- Windows Phone 7 cs页面添加样式
- MLPerf发布首个AI芯片推理测试排行榜:阿里平头哥含光800获得多项第一
- [android] 异步http框架与实现原理
- VTK:可视化之PointSize
- Oracle的package(包)
- c# 笔记 数据类型转换 数组 函数
- unity全栈开发是什么意思_unity游戏公司面试问题总结
- java 拷贝文件夹的实现
- 为iPhone 12上市做准备,台积电月底前投产A14 Bionic芯片
- 基于JAVA+SpringMVC+Mybatis+MYSQL的快递预取件查询系统
- 我心目中的支付宝架构
- 四种负载均衡技术大比拼
- CocosCreator编辑器界面
- 贝叶斯公式的直观理解(先验概率/后验概率)
- 在线解方程的计算机,解方程计算器在线使用 方程计算器如何在线使用
- 【教程】如何批量制作线刷包和卡刷包
- samba端口号修改_samba 端口号(samb端口号)
- 基于线性回归的员工离职率预测