日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb中验证码的实现

發(fā)布時間:2023/12/10 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb中验证码的实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  在Web程序中,驗證碼是經(jīng)常使用的技術之一。Web程序永遠面臨未知用戶和未知程序的探測。為了防止惡意腳本的執(zhí)行,驗證碼技術無疑是首選方案之一。本文將討論如何在JSP和Servlet中使用驗證碼技術。

  驗證碼的產(chǎn)生思路很簡單,在Servlet中隨機產(chǎn)生驗證碼字符序列,并計入session中,JSP中以圖片的形式進行顯示。當用戶在JSP表單中輸入驗證碼并提交時,在相應的Servlet中驗證是否與session中保存的驗證碼一致。下面通過代碼,一次演示驗證碼產(chǎn)生和實現(xiàn)的驗證的過程。

  1. 驗證碼的產(chǎn)生

  我們需要創(chuàng)建一個名為ValcodeServlet的servlet并在其doGet()方法中完成驗證碼的產(chǎn)生。首先通過隨機數(shù)的產(chǎn)生類Random隨機產(chǎn)生一個4位的驗證碼,并將其存入session;然后使用BufferedImage和Graphics類把驗證碼轉(zhuǎn)為圖片,當然為了起到較好的效果,我們需要添加一些干擾線;最后使用ImageIO將圖片輸出。詳細代碼如下:

protectedvoiddoGet(HttpServletRequest request, HttpServletResponse ? response) throwsServletException, IOException {

?????? // 告知瀏覽當作圖片處理

?????? response.setContentType("image/jpeg");

?

?????? // 告訴瀏覽器不緩存

?????? response.setHeader("pragma", "no-cache");

?????? response.setHeader("cache-control", "no-cache");

?????? response.setHeader("expires", "0");

?

?????? // 產(chǎn)生由4位數(shù)字構(gòu)成的驗證碼

?????? int length = 4;

?????? String valcode ? = "";

?????? Random rd = ? new Random();

?????? for(int i=0; ? i<length; i++)

?????????? valcode+=rd.nextInt(10);

?

?????? // 把產(chǎn)生的驗證碼存入到Session中

?????? HttpSession ? session = request.getSession();

?????? session.setAttribute("valcode", valcode);

?

?????? // 產(chǎn)生圖片

?????? int width = 80;

?????? int height = 25;

?????? BufferedImageimg ? = newBufferedImage(width, height,BufferedImage.TYPE_INT_RGB);

?

?????? // 獲取一個Graphics

?????? Graphics g ? = img.getGraphics();

?

?????? // 填充背景色

?????? g.setColor(Color.WHITE);

?????? g.fillRect(0, ? 0, width, height);

?

?????? // 填充干擾線50

?????? for(int i=0; ? i<50; i++){

?????????? g.setColor(new ? Color(rd.nextInt(100)+155,rd.nextInt(100)+155,rd.nextInt(100)+155));

?????????? g.drawLine(rd.nextInt(width), ? rd.nextInt(height),rd.nextInt(width), rd.nextInt(height));

?????? }

?

?????? // 繪制邊框

?????? g.setColor(Color.GRAY);

?????? g.drawRect(0, ? 0, width-1, height-1);

?

?????? // 繪制驗證碼

?????? Font[] ? fonts = {new Font("隸書",Font.BOLD,18),new Font("楷體",Font.BOLD,18),new Font("宋體",Font.BOLD,18),new Font("幼圓",Font.BOLD,18)};

?????? for(int i=0; ? i<length; i++){

?????????? g.setColor(new ? Color(rd.nextInt(150),rd.nextInt(150),rd.nextInt(150)));

?????????? g.setFont(fonts[rd.nextInt(fonts.length)]);

?????????? g.drawString(valcode.charAt(i)+"", width/valcode.length()*i+2, 18);

?????? }

?

?????? // 輸出圖像

?????? g.dispose();

?????? ImageIO.write(img, ? "jpeg", response.getOutputStream());

??? }

  上面的代碼只是產(chǎn)生了一個常規(guī)的驗證碼,我們可以根據(jù)自己的需要對驗證碼的產(chǎn)生策略和干擾線進行調(diào)整。Servlet編寫完畢,別忘了在web.xml中進行配置以便能在JSP中調(diào)用,其代碼如下:

<servlet>

<description></description>

<display-name>ValcodeServlet</display-name>

<servlet-name>ValcodeServlet</servlet-name><servlet-class>org.icer.jee.valcode.servlet.ValcodeServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ValcodeServlet</servlet-name>

<url-pattern>/ValcodeServlet</url-pattern>

</servlet-mapping>

?

  2. 驗證碼的顯示

  產(chǎn)生驗證碼的servlet編寫完畢,并且已經(jīng)web.xml中進行了配置,那么我們在input.jsp中使用<img />標記以圖片的方式調(diào)用servlet即可顯示驗證碼。
? ? ? ? ? ? ? ? ? ? ? ?

  當然為了能起到驗證效果,本例中還包含了簡單的表單。為了放置驗證碼無法識別,此處還提供了看不清點擊換一張功能,用戶點擊圖片時重新加載驗證碼圖片(問號是為了放置瀏覽器緩存而不能實現(xiàn)重新請求圖片)。JSP中表單部分代碼如下:

<formname="form1"method="post"action="LoginServlet">

驗證碼:

<inputname="vcode"type="text"class="input02"id="vcode">

<imgsrc="ValcodeServlet"align="absmiddle"title="看不清,點擊換一張"onClick="this.src=this.src+'?'"/>

<inputtype="submit"name="button"id="button"value=" ? 提交 ">

</form>

  3. 實現(xiàn)驗證功能

  當表單提交到CheckServlet時,對用戶填寫的驗證碼和session中存儲的驗證碼進行比對,根據(jù)結(jié)果給出不同提示。代碼如下:

protectedvoiddoPost(HttpServletRequest request, HttpServletResponse ? response) throwsServletException, IOException {

?????? // 獲取驗證碼

?????? String ? valcode = request.getSession().getAttribute("valcode").toString();

?????? // 獲取用戶填寫的驗證碼

?????? String ? vcode = request.getParameter("vcode");

?????? // 進行驗證

?????? if(!valcode.equals(vcode))

?????????? System.out.println(">>>驗證碼錯誤!");

?????? else

?????????? System.out.println(">>>驗證碼正確!");

??? }

  上面只是根據(jù)驗證情況在控制臺進行了輸出,使用時根據(jù)實際的業(yè)務邏輯需求進行修改即可。

??? 總起來說,驗證碼技術本質(zhì)上就是利用Java繪圖技術把隨機產(chǎn)生的驗證碼字符圖形化,并在JSP中以圖形調(diào)用,最后在用戶提交表單后在對應的servlet中進行驗證。本文只是提供驗證碼的基本實現(xiàn)思路,希望大家能靈活應用。

  作者:中軟卓越天津ETC

轉(zhuǎn)載于:https://www.cnblogs.com/zretc/archive/2013/06/09/3129062.html

總結(jié)

以上是生活随笔為你收集整理的JavaWeb中验证码的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。