自己的验证图片生成servlet,还有相关的配置和JSP。先留个脚印
package com.thomas.logoimagecheck;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
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 ValidateCodeServlet extends HttpServlet {
// 验证码宽和高及验证码的位数
private int width = 80;
private int height = 30;
private int codecount = 4;
private int fontheight;
private int x;
private int codeY;
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 inti() throws ServletException {
// 从web.xml文件中读取参数
String strWidth = this.getInitParameter("width");
String strHeight = this.getInitParameter("height");
String codeCount = this.getInitParameter("codeCount");
try {
if (strWidth != null && strWidth.length() != 0) {
width = Integer.getInteger(strWidth);
}
if (strHeight != null && strHeight.length() != 0) {
height = Integer.parseInt(strHeight);
}
if (codeCount != null && codeCount.length() != 0) {
codecount = Integer.parseInt(codeCount);
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 定义图像buffer
x = width / (codecount + 1);
fontheight = height - 4;
codeY = height - 4;
BufferedImage bimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
Random random = new Random();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。(fontheight实现了)
Font font = new Font("Times New Roman",Font.PLAIN,fontheight);
// 设置画的边框
g.setFont(font);
g.setColor(new Color(110,110,110));
g.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线
//g.setColor(Color.BLACK);
for (int i = 0; i < 160; i++) {
int x = random.nextInt(160);
int y = random.nextInt(160);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
StringBuffer randomcode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生验证码
for (int i = 0; i < codecount; i++) {
// 产生验证码的数字
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
System.out.print(strRand);
red=20+random.nextInt(110);
green=20+random.nextInt(110);
blue=20+random.nextInt(110);
g.setColor(new Color(red,green,blue));
g.drawString(strRand,18*i+10,codeY);
randomcode.append(strRand);
}
//把字符串存储到session中
HttpSession session=req.getSession();
session.setAttribute("valibaleCode", randomcode.toString());
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setContentType("image/jpeg");
ServletOutputStream sos=resp.getOutputStream();
ImageIO.write(bimage, "jpeg", sos);
sos.close();
}
}
下面是验证的jsp
<body>
<% String str=(String)session.getAttribute("valibaleCode");
String imagestr=request.getParameter("rand");
//out.print(request.getParameter("rand"));
//out.print(str);
if(!imagestr.equalsIgnoreCase(str)){
out.print("unpassed");
}
if(imagestr.equalsIgnoreCase(str)){
out.print("passed ");
}
%>
<form method=post action="logoncheck/logon.jsp">
<img border=0 src="<%=basePath %>validate">
<input type=text name=rand value=""/>
<input type=submit value="check"/>
</form>
</body>
web.xml文件
<servlet-name>ValidateCodeServlet</servlet-name>
<servlet-class>com.thomas.logoimagecheck.ValidateCodeServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>200</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>80</param-value>
</init-param>
<init-param>
<param-name>codeCount</param-name>
<param-value>5</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ValidateCodeServlet</servlet-name>
<url-pattern>/validate</url-pattern>
</servlet-mapping>
分享到:
相关推荐
导入eclipse就可以运行看到效果,导入eclipse就可以运行看到效果,导入eclipse就可以运行看到效果
自己做的J2EE小程序,登陆界面上的图片验证代码。
servlet动态生成登陆验证图片 pdf
2.图片还原,建议去用浏览器的审查元素点着验证图片审查一下,不然发现网站的验证码图片是width: 260px;height: 116px;然后被分割成40个小块,每个小块13*58;这些数据都能通过审查发现,可以给你很多启发,也可以...
资源名:asp.net短信登录验证码和图片验证程序源码 资源类型:程序源代码 源码说明: 1.实现了验证码倒计时的功能 1.以下验证码例子采用的是先获取手机号文字验证码,如果文字验证码收不到,将采用语音播放验证码的...
登陆验证+servlet动态生成图片验证码
登陆 图片验证码 源码 完美实现。
不求好评,只求认同,我只想和大家一起进步,觉得小弟的做的垃圾,我会吸取大哥们的指点错误进行改正。谢谢各位大哥们
插件描述:实现滑动图片验证的JS插件 使用方法: 引入jigsaw.js 和 jigsaw.css <link rel="stylesheet" href="jigsaw.css"> [removed][removed] 1 jigsaw.init(element[, success][, fail]) jigsaw.init接收...
一个基于asp.net C#后台的QQ第三方登陆后台,含发送微博,发送带图片微博示例。请在QQ申请到开发者账号以后将appkey在webconfig文件中配置,并且配置好加调地址。
简单易用
简单登陆器,登陆成功后进如MDI界面,进行http基本操作。例如:获取headers,下载,浏览网页。。。 自己做的,没什么注释。 vs2005,第一次上传,请多多指教。
PHP版,拖动图片验证;php js实现拖动滑块完成拼图验证码
网站登陆滑动验证图片的还原
该项目以ssm框架为基础,实现了增删改查、分页查询、验证登录、登陆拦截等功能。
最近初学.net在网上找些资料,整理分享一下吧
源码参考 欢迎下载
以图片形式,可生成随机验证码,用于登录验证,就如CSDN的验证码
微信小程序:登陆/注册验证手机号/tab切换/进度条/选项卡/...xfb-fdmp-master.zip