Servlet 驗(yàn)證碼

http://blog.csdn.net/ayhlay/article/details/13625275

1.驗(yàn)證碼及其作用

驗(yàn)證碼:就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號,生成一幅圖片拳话, 圖片里加上一些干擾象素(防止OCR)歹茶,由用戶肉眼識別其中的驗(yàn)證碼信息夕玩,輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能惊豺。

作用:驗(yàn)證碼一般是防止有人利用機(jī)器人自動批量注冊燎孟、對特定的注冊用戶用特定程序暴力破解方式進(jìn)行不斷的登陸、灌水尸昧。因?yàn)轵?yàn)證碼是一個混合了數(shù)字或符號的圖片揩页,人眼看起來都費(fèi)勁,機(jī)器識別起來就更困難烹俗。像百度貼吧未登錄發(fā)貼要輸入驗(yàn)證碼大概是防止大規(guī)模匿名回帖的發(fā)生爆侣。

開發(fā)步驟

1、開發(fā)servletpackage com.controller;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.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class SafeCode extends HttpServlet {public static final char[] CHARS = { '1', '2', '3', '4', '5', '6', '7','8', '9', 'k', 'A', 'Q', 'x', 'E', 'R', 'T', 'G', 'D', 'S', 'W','G', 'H', 'C', 'B', 'a', 'w', 'e', 'r', 't', 'd', 'F' };// 隨機(jī)字符的字典public static Random random = new Random();// 隨機(jī)數(shù)public static String getRandomString() {// 字符的緩存StringBuffer buf = new StringBuffer();for (int i = 0; i <4; i++) {// 循環(huán) 六次buf.append(CHARS[random.nextInt(CHARS.length)]);}return buf.toString();}public static Color getRandomColor() {return new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255));}public static Color getReverseColor(Color c) {return new Color(255 - c.getRed(), 255 - c.getGreen(),255 - c.getBlue());}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpeg");// 設(shè)置輸出的類型String randomString = getRandomString();// 得到返回的字符集request.getSession(true).setAttribute("randomString", randomString);int with = 80;int hight =36;// 生成圖片的大小Color color = getRandomColor();// 用于背景色Color reverse = getReverseColor(color);// 用于前景色BufferedImage bi = new BufferedImage(with, hight,BufferedImage.TYPE_INT_RGB);// 創(chuàng)建一個彩色的圖片Graphics2D g = bi.createGraphics();// 獲取到繪圖對象g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 18));// 設(shè)置字體g.setColor(color);// 設(shè)置顏色g.fillRect(0, 0, with, hight);// 繪制背景g.setColor(reverse);// 設(shè)置顏色g.drawString(randomString, 18, 25);// 繪制隨機(jī)字符for (int i = 0, n = random.nextInt(18); i < n; i++) {// 畫最多100個噪音點(diǎn)g.drawRect(random.nextInt(with), random.nextInt(hight), 1, 1);// 隨機(jī)噪音點(diǎn)}ServletOutputStream out = response.getOutputStream();// 轉(zhuǎn)換圖片格式JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);// 對圖片進(jìn)行編碼out.flush();// 輸出}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}

2幢妄、在jsp頁面中開發(fā)<input id="yzm"

name="yzm" type="text" class="form-control x164 in"><img alt="驗(yàn)證碼" src="SafeCode" id="Identity">

請?zhí)顚憟D片中的字符兔仰,不區(qū)分大小寫<a href="javascript:go()">看不清楚?換張圖片</a><script type="text/javascript">function go(){

document.getElementById("Identity").src = 'SafeCode?dddd='

+ new Date().getTime();</script>

}3開發(fā)servletString jl = request.getParameter("jl");String yzm = request.getParameter("yzm");String randomString = (String)request.getSession().getAttribute("randomString");

if(yzm.equalsIgnoreCase(randomString)){out.print("驗(yàn)證通過:"+user+"

"+jl);}else{out.print("驗(yàn)證非法=对А:醺啊!潮尝!");}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榕吼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勉失,更是在濱河造成了極大的恐慌羹蚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戴质,死亡現(xiàn)場離奇詭異,居然都是意外死亡踢匣,警方通過查閱死者的電腦和手機(jī)告匠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离唬,“玉大人后专,你說我怎么就攤上這事∈漭海” “怎么了戚哎?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵裸诽,是天一觀的道長。 經(jīng)常有香客問我型凳,道長丈冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任甘畅,我火速辦了婚禮埂蕊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疏唾。我一直安慰自己蓄氧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布槐脏。 她就那樣靜靜地躺著喉童,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顿天。 梳的紋絲不亂的頭發(fā)上堂氯,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機(jī)與錄音露氮,去河邊找鬼祖灰。 笑死,一個胖子當(dāng)著我的面吹牛畔规,可吹牛的內(nèi)容都是我干的局扶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叁扫,長吁一口氣:“原來是場噩夢啊……” “哼三妈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起莫绣,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤畴蒲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后对室,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體模燥,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年掩宜,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫骂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡牺汤,死狀恐怖辽旋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤补胚,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布码耐,位于F島的核電站,受9級特大地震影響溶其,放射性物質(zhì)發(fā)生泄漏骚腥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一握联、第九天 我趴在偏房一處隱蔽的房頂上張望桦沉。 院中可真熱鬧,春花似錦金闽、人聲如沸纯露。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埠褪。三九已至,卻和暖如春挤庇,著一層夾襖步出監(jiān)牢的瞬間钞速,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工嫡秕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渴语,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓昆咽,卻偏偏與公主長得像驾凶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掷酗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理调违,服務(wù)發(fā)現(xiàn),斷路器泻轰,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用技肩。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,587評論 1 114
  • 在探索架構(gòu)、微服務(wù)浮声、Spring Cloud之路上發(fā)現(xiàn)的好文虚婿,特收錄于此以便自己查閱,也望能為同路中人提供幫助泳挥。 ...
    簡單的土豆閱讀 1,199評論 0 16
  • 一天又匆忙的過去了 沒有時間緬懷 沒有時間遺憾 躺在床上久久不舍道晚安 似乎還有許多的書要看 許多的話要說 許多的...
    愛蔻嚴(yán)玲閱讀 203評論 0 1
  • 公司里總有那么幾個人然痊,做起事來認(rèn)真負(fù)責(zé),也總有那些偷奸讼劢啵滑之輩玷过,事到臨頭腳底抹油爽丹,溜之大吉筑煮。 年前年后辛蚊,似乎已經(jīng)有...
    少年長志閱讀 472評論 0 0