1.在web.xml下配置2个servlet,VerifyCodeServlet用来生成验证码图像,
ResultServlet用来做服务器端验证。
<servlet>
<servlet-name>VerifyCodeServlet</servlet-name>
<servlet-class>VerifyCodeServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ResultServlet</servlet-name>
<servlet-class>ResultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VerifyCodeServlet</servlet-name>
<url-pattern>/verifyCodeServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResultServlet</servlet-name>
<url-pattern>/resultServlet</url-pattern>
</servlet-mapping>
2.servlet类文件
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class VerifyCodeServlet extends HttpServlet {
/**
* 验证码图片的宽度。
*/
private int width = 70;
/**
* 验证码图片的高度。
*/
private int height = 20;
/**
* 验证码字符个数
*/
private int codeCount = 4;
/**
* xx
*/
private int xx = 0;
/**
* 字体高度
*/
private int fontHeight;
/**
* codeY
*/
private int codeY;
/**
* codeSequence
*/
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
/**
* 初始化验证图片属性
*/
public void init() throws ServletException {
// 从web.xml中获取初始信息
// 宽度
String strWidth = this.getInitParameter("width");
// 高度
String strHeight = this.getInitParameter("height");
// 字符个数
String strCodeCount = this.getInitParameter("codeCount");
// 将配置的信息转换成数值
try {
if (strWidth != null && strWidth.length() != 0) {
width = Integer.parseInt(strWidth);
}
if (strHeight != null && strHeight.length() != 0) {
height = Integer.parseInt(strHeight);
}
if (strCodeCount != null && strCodeCount.length() != 0) {
codeCount = Integer.parseInt(strCodeCount);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
xx = width / (codeCount + 1);
fontHeight = height - 2;
codeY = height - 4;
}
/**
* @param req
* @param resp
* @throws ServletException
* @throws java.io.IOException
*/
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gd = buffImg.createGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
gd.setColor(Color.WHITE);
gd.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 设置字体。
gd.setFont(font);
// 画边框。
gd.setColor(Color.BLACK);
gd.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
gd.setColor(Color.lightGray);
for (int i = 0; i < 16; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
gd.drawLine(x, y, x + xl, y + yl);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码。
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用随机产生的颜色将验证码绘制到图像中。
gd.setColor(new Color(red, green, blue));
gd.drawString(strRand, (i + 1) * xx, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
session.setAttribute("validateCode", randomCode.toString());
// 禁止图像缓存。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
}
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String validateC = (String) request.getSession().getAttribute("validateCode");
String veryCode = request.getParameter("code");
PrintWriter out = response.getWriter();
veryCode = veryCode.toUpperCase();
if(veryCode==null||"".equals(veryCode)){
out.print("false");
}else{
if(validateC.equals(veryCode)){
out.print("true");
}else{
out.print("false");
}
}
out.flush();
out.close();
}
}
3.jsp页面显示
<input type="text" id="checkCode" name="checkCode" class="s_td"/><img id="imgObj" alt="" src="<c:url value='/verifyCodeServlet'/>" style="vertical-align:top;margin-top:1px;margin-left:5px;"/>
<a href="javascript:void(0);" onclick="changeImg();return false;">看不清,换一张</a> <span id="error"></span>
4.ajax验证
//------改变验证码内容------
function changeImg(){
var imgSrc = $("#imgObj");
imgSrc.attr("src",chgUrl("<c:url value='/verifyCodeServlet'/>"));
$("#checkCode").focus();
}
//时间戳
//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳
function chgUrl(url){
var timestamp = (new Date()).valueOf();
if((url.indexOf("&")>=0)){
url = url + "&tamp=" + timestamp;
}else{
url = url + "?timestamp=" + timestamp;
}
return url;
}
//判断输入的验证码是否正确
function isRightCode(){
var res = "false";
var code = $("#checkCode").attr("value");
code = "data="+new Date()+"&code=" + code;
$.ajax({
type:"POST",
url:"<c:url value='/resultServlet'/>",
data:code,
//同步
async:false,
success:function(data){
res=data;
}
});
return res;
}
分享到:
相关推荐
注册表的值。有时候打开网页时,验证码显示不了,可能是电脑里的配置需要改动。。。
Java产生简单算术验证码图片,此为Servlet需要配置web.xml,配置方法如下: <servlet-name>authimg <servlet-class>img.AuthImg <servlet-name>authimg <url-pattern>/authimg.img ...
根据 官方Demo 配置我们的控制器和路由 根据 官方Demo 配置我们的登录模板 测试 Geetest 集成详细过程 1、实现登录的大致逻辑 创建控制器 php artisan make:controller GeetestController 编辑控制器 /app/...
1、配置文件中增加验证码配置 'captcha' => [ // 验证码字符集合 'codeSet' => '23456789', // 验证码字体大小(px) 'fontSize' => 25, // 是否画混淆曲线 'useCurve' => false, // 验证码位数 'length' => ...
java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/> 另外在web.xml中配置验证码类的加载: <servlet-name>...
使用ThinkPHP实现生成/校验验证码功能,供大家参考,具体内容如下 ...1:check() 校验验证码是否正确 2:entry()输出验证码并把验证码的值保存的... //验证码配置 $cfg = array( 'imageH' => 30, // 验证码图片高度 '
如果需要更改和自定义运算方法请移步: config.selfimpr.captcha->配置-> CaptchaConfig-> getKaptchaBeanMath() 滑动验证码:需要将自己的验证码图片配置到application.yml文件路径中。相关的验证码图片和模板在...
ssm框架实现验证码登录,不需要配置jar包,不需要配置springMVC文件,直接在前台配置标签和JavaScript,然后在controller中配置三个方法,资料齐全
kaptcha 是一个非常实用的...有了它,你可以生成各种样式的验证码,因为它是可配置的,下面这篇文章主要给大家介绍了关于Spring MVC中使用Google kaptcha验证码的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
基于python的selenium验证码识别方法,内附详细的测试代码和测试图片,亲测可以实现。可以用于selenium自动化测试,内涵安装和配置的方法。
前言:最近做了一个小程序抽奖的活动,出现了部分用户恶意薅羊毛...验证码接入前,需要先在验证码控制台中注册 AppID 和 AppSecret,注册完成后,您可以在控制台的基础配置中查看 AppID (下文extraData中使用) 以及 App
本文实例讲述了PHP登录验证码的实现与使用方法。分享给大家供大家参考,具体如下: 1. 新建code.php验证码生成文件 在此之前必须打开php的GD库,修改php.ini文件的配置,取消extension=php_gd2.dll前面的分号。代码...
ASP.NET MVC 3简单算数表达式生成验证码,使用 HtmlHelper扩展方法。没有使用WCF等。使用C#编写。 关键特性: 验证码为简单的数学运算 随机替换预先定义的文本(+为plus,-为minus) 文本颜色随机改变 代码中没有开放...
应用于爬虫,注册,登录等场景的验证码识别 ...快速 便捷 通用的方法提供用户调用,堪称作者开发神器 项目说明: Python开发, 用于验证码识别,秉承着会HttpPost协议即可调用的原则! 支持部署 本地 和 服务器 .
本程序共提供了三种图文验证方法,第1种是英文、数字和中文混合的彩色验证码,如图1.1所示。第2种是Ajax实现无刷新的彩色验证码,如图1.2所示。第3种是加密的验证码,如图1.3所示。 登录用户名和密码统一为mr,...
Happy Captcha简易验证码安装:如果你的项目使用的是Maven进行依赖管理,你只需向pom.xml文件添加下面的配置即可: com.ramostear Happy-Captcha 1.0.1 Gradle用户则可以通过引入如下的配置获取Happy Captcha:...
主要介绍了thinkPHP显示不出验证码的原因与解决方法,结合具体实例形式分析了thinkPHP关于验证码显示的相关配置方法与注意事项,需要的朋友可以参考下
添加TopSdk.dll,SMS.DLL引用 声明 using SMS; 调用 sms.send();//1成功0失败 ...添加配置文件 <!--短信配置--> <!--使用那种平台(ali是阿里,sh是用上海,qq是QQ云)--> <add key="pingtai" value="sh"/>
除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库。用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同)。可以...