java Web実装検証コード--コードが超簡単です.

23536 ワード

1、先端表示
HTML:
<h3>h3>
<input type="text" name="validationCode" id="validationCode" placeholder="      " lay-verify="required"> 
<img src="validate.jsp" id="validationCode_img" title="   ?   " onclick="loadimage();return false;" name="validationCode_img" align="middle">
JS:
//
function loadimage(){
            document.getElementById("validationCode_img").src= "validate.jsp?time=" + new Date().getTime();
        }
2、一つのページで検証コードの画像を生成します.ここではJSPページでvalidate.jspを使います.
@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
@page import="java.awt.image.BufferedImage"%>
@page import="java.awt.Graphics2D"%>
@page import="java.awt.Color"%>
@page import="java.awt.Font"%>
@page import="javax.imageio.ImageIO"%>
@page import="java.util.Random"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>   title>
head>
<body>

    int width = 60;
    int height = 20;
    //                Image
    BufferedImage buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
    Graphics2D g = buffImg.createGraphics();
    
    //           
    Random random = new Random();
    
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, width, height);
    
    //     ,                
    Font font = new Font("Times New Roman", Font.PLAIN, 18);
    //     
    g.setFont(font);
    
    //    
    g.setColor(Color.BLACK);
    g.drawRect(0, 0, width - 1, height - 1);
    
    //     160    
    g.setColor(Color.LIGHT_GRAY);
    for (int i = 0; i < 160; i++) {
        int x = random.nextInt(width);
        int y = random.nextInt(height);
        int x1 = random.nextInt(12);
        int y1 = random.nextInt(12);
        g.drawLine(x, y, x + x1, y + y1);
    }
    
    // randomCode             
    StringBuffer randomCode = new StringBuffer();
    int red = 0, green = 0, blue = 0;
    
    //     4       
    for (int i = 0; i < 4; i++) {
        //             
        String strRand = String.valueOf(random.nextInt(10));
    
        //                
        red = random.nextInt(110);
        green = random.nextInt(50);
        blue = random.nextInt(50);
    
        //                   
        g.setColor(new Color(red, green, blue));
        g.drawString(strRand, 13 * i + 6, 16);
    
        randomCode.append(strRand);
    }
    
    //             session 
    //HttpSession session = request.getSession();
    session.setAttribute("randomCode", randomCode.toString());
    
    //       
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    
    response.setContentType("image/jpeg");
    //       servlet    
    ServletOutputStream sos = response.getOutputStream();
    ImageIO.write(buffImg, "jpeg", sos);
    sos.close();
    //sos = null;
    out.clear();
    out = pageContext.pushBody();
%>
body>
html>
3、validate.jspページで生成された検証コードは実はjavaバックエンドで生成されたので、sessionに保存しました.ユーザーが提出する時に記入した検証コードを後端に持っていくだけでいいです.ここではajax要求を使っています.バックエンドは検証コードとsessionの中で同じかどうかを判断するだけでいいです.