Jsp servlet驗(yàn)證碼工具類分享
昨晚在csdn看到一位前輩寫一個(gè)ajax+servlet+jsp驗(yàn)證,頓時(shí)心血來潮,在閱讀前輩的代碼下我親手體驗(yàn)一下,做了一個(gè)驗(yàn)證碼生成工具類,以供大家做個(gè)參考。
1、添加VeriyCodeUtils類生成驗(yàn)證碼圖像
package com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
*
* @author hubiao
* 驗(yàn)證碼生成器
* 用到API
* BufferedImage 創(chuàng)建一個(gè)圖像
* Graphics2D 繪制
* fillRect(x,y,width,height);背景
* font()字體
* drawRect();邊框
* drawLine();線
* drwaString:圖像數(shù)據(jù)
* ImageIO 生成圖像
*/
public class VeriyCodeUtils {
/**
* @param output 保存驗(yàn)證圖像的流
* @return 驗(yàn)證碼
*/
public static String newVeriyCode(OutputStream output)
{
int width = 90;
int height = 40;
int codeCount = 5;
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' };
//創(chuàng)建圖像對(duì)象,8位RGB
BufferedImage buffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//通過Crapahices來繪制圖像到BufferedImage中
Graphics2D gra = buffered.createGraphics();
//設(shè)置圖片背景:白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height);
//設(shè)置字體,字體大小根據(jù)圖片高度決定
gra.setFont(new Font("Fixedsys",Font.PLAIN,height-2));
//設(shè)置邊框:黑色,1cm
gra.setColor(Color.BLACK);
gra.drawRect(0, 0, width-1, height-1);
//生成10條黑色干擾線
gra.setColor(Color.BLACK);
Random ran = new Random();
for(int i = 0; i < 70;i++)
{
int x = ran.nextInt(255);
int y = ran.nextInt(255);
int x1 = ran.nextInt(255);
int y1 = ran.nextInt(255);
gra.drawLine(x, y,x+x1, y+y1);//畫直線
}
//生成驗(yàn)證碼
StringBuffer sb = new StringBuffer();
int r = 0,g = 0,b = 0;
for(int i = 0; i < codeCount; i++)
{
String strRand = String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);
//對(duì)每位驗(yàn)證碼都生成不同的顏色,增加識(shí)別系統(tǒng)難度
r = ran.nextInt(255);
g = ran.nextInt(255);
b = ran.nextInt(255);
gra.setColor(new Color(r, g, b));
gra.drawString(strRand, (i+1)*13, height-4);
sb.append(strRand);
}
try {
ImageIO.write(buffered, "jpeg", output);
} catch (Exception e) {
throw new RuntimeException(e);
}
return sb.toString();
}
}
2、servlet使用驗(yàn)證碼
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//禁止圖像緩存
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
//生成驗(yàn)證碼圖像
String veriyCode = VeriyCodeUtils.newVeriyCode(resp.getOutputStream());
//將驗(yàn)證碼保存到session中
HttpSession session = req.getSession();
session.setAttribute("validateCode", veriyCode);
}
3、JSP頁面使用驗(yàn)證碼
</head>
<script type="text/javascript">
function createCode()
{
var t = new Date().getTime();//防止頁面緩存,使用時(shí)間搓
var srcImg = document.getElementById("srcImg");
srcImg.src="/ImgVeifyWeb/vity.do?"+t;
}
</script>
<body>
<h1>${requestScope.code}</h1>
<img id="srcImg" src="<c:url value="/vity.do"></c:url>" /> #這里使用直接讓img訪問servlet,通過response響應(yīng)一個(gè)圖像流
<a href="##" rel="external nofollow" id="codeId" onclick="createCode()">換一張</a>
<form action="<c:url value="/hello.do"></c:url>" method="post">
<input type="text" name="codeVify"/>
<input type="submit" value="提交"/>
</form>
</body>
4、校驗(yàn)驗(yàn)證碼
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
Object validateCode = session.getAttribute("validateCode");
System.out.println(validateCode);
String codeVify = req.getParameter("codeVify");
if(codeVify==null || codeVify.equals(""))
{
req.setAttribute("code","驗(yàn)證證不能為空");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}else if(!validateCode.toString().equalsIgnoreCase(codeVify))
{
req.setAttribute("code","驗(yàn)證證錯(cuò)誤");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}
System.out.println("下面開始 做其他業(yè)務(wù)操作....");
}
校驗(yàn)圖如下:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:JSP使用過濾器防止Xss漏洞
欄 目:JSP編程
下一篇:servlet+jsp實(shí)現(xiàn)過濾器 防止用戶未登錄訪問
本文標(biāo)題:Jsp servlet驗(yàn)證碼工具類分享
本文地址:http://www.jygsgssxh.com/a1/JSPbiancheng/11421.html
您可能感興趣的文章
- 01-11在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法
- 01-11jsp文件下載功能實(shí)現(xiàn)代碼
- 01-11JSP頁面跳轉(zhuǎn)方法大全
- 01-11jsp 使用request為頁面添加靜態(tài)數(shù)據(jù)的實(shí)例
- 01-11JSP servlet實(shí)現(xiàn)文件上傳下載和刪除
- 01-11JSP狀態(tài)管理的簡單介紹
- 01-11jsp+servlet實(shí)現(xiàn)文件上傳與下載功能
- 01-11JSP的setProperty的使用方法
- 01-11jsp中sitemesh修改tagRule技術(shù)分享
- 01-11Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件上傳(一)


閱讀排行
本欄相關(guān)
- 01-11web下載文件和跳轉(zhuǎn)的方法
- 01-11Spring注入Date類型的三種方法總結(jié)
- 01-11在JSP中使用formatNumber控制要顯示的小
- 01-11Properties 持久的屬性集的實(shí)例詳解
- 01-11EJB3.0部署消息驅(qū)動(dòng)Bean拋javax.naming.Na
- 01-11jsp文件下載功能實(shí)現(xiàn)代碼
- 01-11JSP頁面跳轉(zhuǎn)方法大全
- 01-11詳解Spring的核心機(jī)制依賴注入
- 01-11jsp 使用request為頁面添加靜態(tài)數(shù)據(jù)的實(shí)
- 01-11Spring獲取ApplicationContext對(duì)象工具類的
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


