1. 程式人生 > >JavaWeb專案中生成驗證碼

JavaWeb專案中生成驗證碼

在專案中使用servlet隨機生成驗證碼

1.在jsp頁面中驗證碼圖片加入img標籤,src為生成驗證碼的servlet的url;

<img id="codeImg" src="/AuthCode/code" onclick="refreshCode()"/>

2.在servlet中生成隨機驗證碼

public class AuthCode extends HttpServlet {
    private static final int WIDTH = 60;//設定驗證碼圖片寬度
    private static final int HEIGHT = 20;//設定驗證碼圖片高度
private static final int LENGTH = 4;//設定驗證碼長度 //設定驗證碼隨機出現的字元 private static final String str = "1234567890" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char[] chars = str.toCharArray();//將字元放在陣列中方便隨機讀取 private static Random random = new Random(); protected
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設定輸出的型別為圖片 response.setContentType("image/jpeg"); //設定不進行快取 response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "no-cache"); response.setHeader("expires"
, "0"); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_3BYTE_BGR); //畫筆 Graphics graphics = image.getGraphics(); //設定背景顏色並繪製矩形背景 graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, WIDTH, HEIGHT); //用於記錄生成的驗證碼 String code = null; //生成驗證碼並繪製 for (int i = 0; i < LENGTH; i++) { String c = "" + chars[random.nextInt(str.length())]; graphics.setColor(getColor()); graphics.drawString(c, 10 * i + 10, 18); code += c; } //生成干擾點 for (int i = 0; i < 50; i++) { graphics.setColor(getColor()); graphics.drawOval(random.nextInt(60), random.nextInt(20), 1, 1); } //將生成的驗證碼存入session中,以便進行校驗 HttpSession session = request.getSession(); session.setAttribute("code", code); //繪製圖片 graphics.dispose(); //將圖片輸出到response中 ImageIO.write(image, "JPEG", response.getOutputStream()); } //隨機生成顏色 private Color getColor() { return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); } }

3.為img標籤新增onclick事件,點選更新驗證碼

<script type="text/javascript">
  function refreshCode() {
    var codeImg = document.getElementById("codeImg");
    var d = new Date();
    codeImg.src = "/AuthCode/code?s="+d;
  }
</script>

檔案:

  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>AuthCode</servlet-name>
        <servlet-class>AuthCode</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AuthCode</servlet-name>
        <url-pattern>/code</url-pattern>
    </servlet-mapping>
</web-app>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>驗證碼</title>
  </head>
  <body>
  <img id="codeImg" src="/AuthCode/code" onclick="refreshCode()">
  </body>
<script type="text/javascript">
  function refreshCode() {
    var codeImg = document.getElementById("codeImg");
    var d = new Date();
    codeImg.src = "/AuthCode/code?s="+d;
  }
</script>
</html>
  • AuthCode.java
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet(name = "AuthCode")
public class AuthCode extends HttpServlet {
    private static final int WIDTH = 60;//設定驗證碼圖片寬度
    private static final int HEIGHT = 20;//設定驗證碼圖片高度
    private static final int LENGTH = 4;//設定驗證碼長度
    //設定驗證碼隨機出現的字元
    private static final String str = "1234567890" +
            "abcdefghijklmnopqrstuvwxyz" +
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char[] chars = str.toCharArray();//將字元放在陣列中方便隨機讀取
    private static Random random = new Random();

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //設定輸出的型別為圖片
        response.setContentType("image/jpeg");

        //設定不進行快取
        response.setHeader("pragma", "no-cache");
        response.setHeader("cache-control", "no-cache");
        response.setHeader("expires", "0");

        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_3BYTE_BGR);

        //畫筆
        Graphics graphics = image.getGraphics();

        //設定背景顏色並繪製矩形背景
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, WIDTH, HEIGHT);

        //用於記錄生成的驗證碼
        String code = null;

        //生成驗證碼並繪製
        for (int i = 0; i < LENGTH; i++) {
            String c = "" + chars[random.nextInt(str.length())];
            graphics.setColor(getColor());
            graphics.drawString(c, 10 * i + 10, 18);
            code += c;
        }

        //生成干擾點
        for (int i = 0; i < 50; i++) {
            graphics.setColor(getColor());
            graphics.drawOval(random.nextInt(60), random.nextInt(20), 1, 1);
        }

        //將生成的驗證碼存入session中,以便進行校驗
        HttpSession session = request.getSession();
        session.setAttribute("code", code);

        //繪製圖片
        graphics.dispose();

        //將圖片輸出到response中
        ImageIO.write(image, "JPEG", response.getOutputStream());
    }

    //隨機生成顏色
    private Color getColor() {
        return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));
    }
}

專案下載

相關推薦

JavaWeb專案生成驗證

在專案中使用servlet隨機生成驗證碼 1.在jsp頁面中驗證碼圖片加入img標籤,src為生成驗證碼的servlet的url; <img id="codeImg" src="/AuthCode/code" onclick="refreshCode(

javaweb頁面新增驗證功能

package cn.itcast.vcode.utils; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image

JAVAWEB專案如何實現驗證

驗證碼基礎 一.什麼是驗證碼及它的作用    :驗證碼為全自動區分計算機和人類的圖靈測試的縮寫,是一種區分使用者是計算機的公共全自動程式,這個問題可以由計算機生成並評判,但是必須只有人類才能解答.可以防止惡意破解密碼、刷票、論壇灌水、有效防止某個黑客對某一個特定註冊使用者

Qt生成驗證

簡述 由於最近博主準備做的一個播放器,在模擬登入/註冊的時候,想做一個驗證碼的功能。在博主參考了部分網上資料後準備自己總結一個基於Qt的驗證碼是生成方式。 關於驗證碼 驗證碼必須隨機生成。 驗證碼必須有一定的識別難度。 關於解決方案 隨機

javaweb登陸註冊驗證的顯示生成(在第一次載入頁面的時候,sesson驗證總是為空)

問題描述:在寫一個登陸介面的時候用到了驗證碼,產生的問題在於使用myeclipse第一次載入index.jsp(我的登陸介面)的時候驗證總是失敗,重新整理一次後驗證成功,或者在第一次進入index.jsp頁面手動重新整理。這就很讓人討厭了。問題的原因:經過除錯後發現,第一從開

隨機生成驗證及python的事務

join != rst row pda cep 操作 status 隨機 1.隨機生成驗證碼 # import random # print(random.random()) #0-1的小數 # print(random.randint(1,3))

php使用陣列 巧妙的生成驗證

我們知道驗證碼的用處很多,那麼在php中如何巧妙的用程式碼編寫呢? 首先我們需要用到幾個函式 1> array_merge-合併一個或多個數組 此函式中如果輸入的陣列中有相同的字串鍵名,則該鍵後面的值將覆蓋前一個值。然而,如果陣列包含數字鍵名,後面的值將不

asp.netashx生成驗證程式碼放在Linux(centos)主機上訪問時無法顯示問題

最近有個專案加入了驗證碼功能,就從自己部落格以前的程式碼中找到直接使用,直接訪問驗證碼頁面報錯如下: Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+

JavaWeb學習(七)HttpServletResponse基本應用——生成驗證圖片並提交到伺服器(6)

一、工程樹: 二、程式碼: CheckServlet.class import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; im

JavaWeb學習(六)HttpServletResponse基本應用——生成驗證(5)

一、程式碼: package com.servlet.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; imp

Vue專案生成二維

本來是由後臺生成二維碼的,但是測試後不是很穩定,由於網路問題有時候會載入不過來。。。 之後就發現vue的兩個外掛:vue-qart和vue-qr。對比之後發現,vue-qr的配置更全一些,所以選擇了vue-qr vue-qart: 1、npm install vue-qart&nbs

PHP網頁因為 要生成驗證而出現 影象“http://localhost/**.php”因其本身有錯無法顯示

我的網頁,要在使用者登入的位置出現驗證碼,程式如下: <?php       header("Content-type:image/jpeg");       ob_end_flush();       $image_width=90;       $image_he

JavaWeb: Servlet生成驗證

package cn.itcast; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.

使用php如何生成驗證

輸出 fontsize lora 支付 () 頭文件 出圖 and utf 項目中經常會遇到一些登陸驗證,支付驗證等等一系列安全驗證的策略。實現方法多種多樣,下面就來講解下如何用php生成簡單的文字+數字組合的驗證碼: 所用語言php,gd庫 原理解釋: a>實質上

java生成驗證圖片

val ttr attribute cep 隨機字符串 sta random pragma rac public class AuthImg extends HttpServlet { /** * */ privat

php生成驗證 參考PHP手冊

ffffff -type apach ob_clean library bom頭 ear png 手冊 視圖層 復制粘貼就可以 phpStudy2013 GD支持未開啟 解決方法 phpStudyAdmin控制臺 - 配置文件 - php.ini 查找“extension=

C#生成驗證之四位隨機數

返回 args nbsp ica ebo inpu cti spa ini 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using Sys

詳解圖形圖像技術如何生成驗證

mage 隨機數 har 地址 idt session floor oct type 先說一下思路: (1)先做出基本樣式 (2)用圖像處理技術生成驗證碼,並存session (3)註意img的路徑,後面要跟一個隨機數,便於每次刷新時,傳的地址都是不一樣的 (4)用for

Python學習心得(五) random生成驗證、MD5加密、pickle與json的序列化和反序列化

用法 div com ict file imp randint csdn == # -*- coding:utf-8 -*- import random as rd #驗證碼 import hashlib as hsl #MD5加密 import pickle,json

django項目驗證模塊

字母 註冊表 路由 required users python content session file 1、安裝驗證碼模塊: pip install django-simple-captcha==0.4.6 2、驗證碼模塊註冊到django setting.py中的