JavaWeb中登录验证码生成
1.页面代码
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="/resources/js/jquery-3.3.1.js" ></script>
<script type="text/javascript" >
function reloadCheckImg()
{
$("img").attr("src", "./img.jsp?t="+(new Date().getTime())); //<img src="...">
}
$(document).ready(function(){
$("#checkcodeId").blur(function(){
var $checkcode = $("#checkcodeId").val();
//校验 :文本框中输入的值 发送到服务端。
//服务端: 获取文本框输入的值 ,和真实验证码图片中的值对比 ,并返回验证结果
$.post(
"/CheckCodeServlet",//服务端地址
"checkcode="+$checkcode ,
function(result){//图片地址(imgs/right.jpg imgs/wrong.jpg)
//result: imgs/right.jpg
var resultHtml = $("<img src='"+result+"' height='15' width='15px' />") ;
$("#tip").html(resultHtml);
}
);
});
});
</script>
</head>
<body>
验证码:
<input type="text" name="checkcode" id="checkcodeId" size="4" />
<!-- 验证码--> <a href="javascript:reloadCheckImg();"> <img src="./img.jsp"/></a> <span id="tip"> </span>
</body>
</html>
2.绘制验证码
<%@ page import="java.awt.*" %>
<%@ page import="java.util.Random" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page contentType="image/jpeg;charset=UTF-8" language="java" %> <%!
//随机产生颜色值
public Color getColor(){
Random ran = new Random() ;//Math.random() 0-1
int r = ran.nextInt(256) ;
int g = ran.nextInt(256) ;
int b = ran.nextInt(256) ;
return new Color(r,g,b) ;//red green blue 0-255
} //产生验证码值
public String getNum() {
// 0-8999 1000-9999
int ran = (int)( Math.random()*9000) +1000 ;
return String.valueOf(ran) ;
}
%> <% //禁止缓存,防止验证码过期
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","0"); //绘制验证码
BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB) ;
//画笔
Graphics graphics = image.getGraphics();
graphics.fillRect(0,0,80,30);
//绘制干扰线条
for(int i=0;i<60;i++)
{
Random ran = new Random() ;
int xBegin = ran.nextInt(80) ;//
int yBegin = ran.nextInt(30) ; int xEnd = ran.nextInt(xBegin +10 ) ;
int yEnd = ran.nextInt(yBegin + 10) ; graphics.setColor( getColor());
//绘制线条
graphics.drawLine(xBegin,yBegin,xEnd,yEnd);
} graphics.setFont(new Font("seif",Font.BOLD,20));
//绘制验证码
graphics.setColor(Color.BLACK);
String checkCode = getNum() ; //2 1 3 4
StringBuffer sb = new StringBuffer() ;
for(int i=0;i<checkCode.length();i++){
sb.append(checkCode.charAt(i)+" " ) ;//验证码的每一位数字
} graphics.drawString( sb.toString(), 15,20 );//绘制验证码 //将验证码真实值 保存在session中,供使用时比较真实性
session.setAttribute("CKECKCODE" ,checkCode ); //真实的产生图片
ImageIO.write(image,"jpeg", response.getOutputStream()) ; //关闭
out.clear();
out = pageContext.pushBody() ; //<input type="image" src="xxx" /> %>
3.service调用
String resultTip = null;
//获取用户输入验证码
String checkcodeClient = request.getParameter("checkcode");
//真实的验证码值
String checkcodeServer = (String) request.getSession().getAttribute("CKECKCODE");
if(checkcodeServer.equals(checkcodeClient)) {
resultTip = "/resources/image/right.jpg";
}else {
resultTip = "/resources/image/wrong.jpg";
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(resultTip);
writer.close();
writer.flush();
JavaWeb中登录验证码生成的更多相关文章
- python登录验证码生成及自动化测试规避
在用django写论坛的时候,需要有登录及注册功能. 故就登录界面后端需要生成随机验证码并传值给前端的代码进行编写如下. 验证码生成png需要调用到python的图形库 生成注册码img import ...
- Javaweb中利用kaptcha生成验证码
引入kaptcha-2.3-jdk15.jar包 在web.xml中进行配置 <servlet> <servlet-name>Kaptcha</servlet-name& ...
- ASP.NET登录验证码解决方案
目录 #验证码效果图 #代码 0.html代码 1.Handler中调用验证码生成类 2.验证码图片绘制生成类 3.高斯模糊算法类 #注意 #参考 在web项目中,为了防止登录被暴力破解,需要在登录的 ...
- JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html 另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...
- Java中SSM+Shiro系统登录验证码的实现方法
1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- java web中验证码生成的demo
首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...
- javaweb项目中表单生成的验证码以及校验
首先先来看一下项目的结构吧,有两个servlet,一个是进行验证码的生成以及存储的,一个是进行校验的,还有一个jsp页面是用来实现form表单的书写和展示: 我们只需要看这三个就行了,其他的自动忽略: ...
- javaweb(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
随机推荐
- python-django项目-Linux系统建立django项目_20191117
python-django项目-Linux系统建立django项目 1,Linux系统下面,cd /usr/local/lib/ 看这个下面会有两个python版本,一个2.7,一个3.5,我们使用 ...
- zcat|subprocess.check_all|subprocess.Popen|gzip|readline()
#!/usr/bin/python from subprocess import check_call import subprocess import gzip ''' $ zcat 160121_ ...
- The sequence and de novo assembly of the giant panda genome.ppt
sequencing:使用二代测序原因:高通量,短序列 不用长序列原因: 1.算法错误率高 2.长序列测序将嵌合体基因错误积累.嵌合体基因:通过重组由来源与功能不同的基因序列剪接而形成的杂合基因 se ...
- 关于Java杂项知识总结
JVM内存结构 JVM在运行时把从操作系统申请到的内存分为若干区域,主要有栈.堆和方法区,方便Java程序使用 堆内存 使用new关键字创建出来的对象都存储在堆内存中 方法区 被加载的类的信息存储在方 ...
- Fastjson主要接口和类库说明
2.主要的使用入口 Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成. public static final ...
- 提前窥测奥斯卡颁奖信封中的谜底 ——Rothschild预测2014奥斯卡花落谁家
--Rothschild预测2014奥斯卡花落谁家" title="提前窥测奥斯卡颁奖信封中的谜底 --Rothschild预测2014奥斯卡花落谁家"> 编者 ...
- H5页面如何引入vConsole
vConsole github地址vConsole 是腾讯开源的项目,这就简单的介绍一下使用 使用npm引入vconsole.min.js下载 vConsole 的最新版本.(不要直接下载 dev 分 ...
- Activiti 5.16 用户手册
http://www.mossle.com/docs/activiti/index.html#bpmnNoneStartEvent Activiti 5.16 用户手册
- JS Style Guide_1
当你在回调函数里要使用函数表达式时,尽量使用箭头函数,比如数组中的 Map.filter.reduce等的回调函数中 [1,2,3].map((x) => { let y = x + 1; re ...
- hibernate需要注意的点
1.需要用Hibernate做实体的类(@Entity)需要在配置文件中配置对应的包(例如:spring/appContext-hibernate.xml). 2.hibernateTemplate中 ...