Struts2中的图片验证码

1.Struts中建一个action

<action name="Code" class="LoginAction" method="code">
		<result name="success" type="stream">
		      <param name="contentType">image/jpeg</param>
		      <param name="inputName">inputStream</param>
		      <param name="bufferSize">2048</param>
			</result></action>

2.写Code.action

首先定义inputStream,并get,set

private ByteArrayInputStream inputStream; 
 public ByteArrayInputStream getInputStream() {
		return inputStream;
	}
	public void setInputStream(ByteArrayInputStream inputStream) {
		this.inputStream = inputStream;
	}

然后Code.action代码如下

 public String code() throws Exception {

    	 int WIDTH = 60;
    	 int HEIGHT = 20;
    	HttpServletResponse response = ServletActionContext.getResponse();

        // 设置浏览器不要缓存此图片
        response.setHeader("Pragma", "no-cache");

        response.setHeader("Cache-Control", "no-cache");

        response.setDateHeader("Expires", 0);

        String str = "0123456789qwertyuiopasdfghjklzxcvbnm";

        char[] rand = new char[4];

        Random random = new Random();

        for (int i = 0; i < 4; i++)
        {
            rand[i] = str.charAt(random.nextInt(36));
        }

        String rands =new String(rand);

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

        Graphics g = image.getGraphics();

        // 产生图像
        // 画背景
        g.setColor(new Color(0xDCDCDC));

        g.fillRect(0, 0, WIDTH, HEIGHT);

        // 随机产生 120 个干扰点

        for (int i = 0; i < 120; i++)
        {
            int x = (int) (Math.random() * WIDTH);

            int y = (int) (Math.random() * HEIGHT);

            int red = (int) (Math.random() * 255);

            int green = (int) (Math.random() * 255);

            int blue = (int) (Math.random() * 255);

            g.setColor(new Color(red, green, blue));

            g.drawOval(x, y, 1, 0);
        }

        g.setColor(Color.BLACK);

        g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));

        // 在不同的高度上输出验证码的每个字符

        g.drawString("" + rands.charAt(0), 1, 17);

        g.drawString("" + rands.charAt(1), 16, 15);

        g.drawString("" + rands.charAt(2), 31, 18);

        g.drawString("" + rands.charAt(3), 46, 16);

        System.out.println(rands);

        // 结束图像 的绘制 过程, 完成图像
        g.dispose();

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        ImageIO.write(image, "jpeg", outputStream);

        ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray());

        this.setInputStream(input);

        HttpSession session = ServletActionContext.getRequest().getSession();

        session.setAttribute("checkCode", rands);

        input.close();

        outputStream.close();
		return SUCCESS;
    }

3.jsp中调用

 <form id="form" action="Login.action" method="post">
    <table border=0 cellpadding="4">
    <tr><td><input type="text" name="username" placeholder="学号/工号/用户名" size="22" style="background-image: url(img/user.JPG);"><br></td></tr>
    <tr><td><input type="password" name="password" placeholder="密码" size="22" style="background-image: url(img/password.JPG);"><br></td></tr>
    <tr><td>
	<input type="text" placeholder="验证码" name="checkCode" size="10"/>
	<img  src="Code.action" onclick="this.src=‘Code.action?‘+ Math.random();" title="点击图片刷新验证码">
   </td> </tr>
    <tr><td><input type="submit" class="btnCheck" value="登录" onclick="validate()" style="width:100%;"></button></td>
    </tr>
    </table>
    </form>

4.在另一个action中验证

HttpSession session = ServletActionContext.getRequest().getSession();
    String checkCode2 = (String)session.getAttribute("checkCode");
    System.out.println(checkCode+"aaa"+checkCode2);
    if(!checkCode.equals(checkCode2))
    {
    	return "chekCodeerror";
    }

5.结果截图

  

时间: 2024-10-11 20:15:42

Struts2中的图片验证码的相关文章

【Nodejs项目手记】Nodejs中使用图片验证码,captchapng模块可以解决Nodejs图片验证码

Nodejs项目,在做图片验证码的时候遇到了难题.Nodejs没有图片库,以后会有,但是现在没有. 网络上搜索一圈,有几个解决方案: 1.采用第三方验证码程序,有的时候,项目可能不允许: 2.使用Java或者PHP生成图片,Nodejs调用,中间采用Redies共享: 这两种方式都不太理想,好在终于找到了可以支持Nodejs图片验证码的一个库,虽然只支持数字,但是也还不错.原理是使用Base64的图片编码方式. 这个库的Gighub地址是:https://github.com/GeorgeCha

在mvc中实现图片验证码的刷新

首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下: public class ValidationCodeHelper { //用户存取验证码字符串 public string validationCode = String.Empty; Random ram = new Random(); Graphics g = null; int bgWidth = 0; int bgHeight = 0; public string Font

django项目登录中使用图片验证码

应用下创建untils文件夹放置封装图片验证码的函数 创建validCode.py文件定义验证码规则 import random def get_random_color(): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def get_valid_code_img(request): # 方式: from PIL import Image, ImageDraw, ImageFon

java中注册图片验证码

package org.servlet.demo; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.charset.Charset; import java.util.Random; im

struts向网页输出图片验证码

前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了. Action代码: [java] view plain copy print? public String processImage(){ String key = ServletActionContext.getRequest().getParameter("key"); if(StringUtils.isEmpty(key)){ return

ASP.NET图片验证码学习!

1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Web;using System.Drawing;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;

图片验证码(Struts2中使用)

写在前面: 最近在项目中做了一个登录页面,用到了图片验证码的功能,所以记录一下.方便之后再有用到,直接拿来用即可.其实图片验证码的生成都是有固定步骤的,网上也有很多的例子,有的时候,如果不想深究,都是可以直接拿来用的.嘻嘻~~~~ 生成图片验证码工具类并在struts2中使用,大概需要以下五个步骤: 1.获取随机数验证码字符串2.生成验证码图片3.将图片转为图片流格式4.提供图片流类型的get()方法5.配置struts.xml 其实上面的前三个步骤,都是在为生成图片验证码做准备,我们将前三步的

struts2中验证码的生成和使用

第一步生产字符串: package com.yancode.demo; import java.util.Arrays; /* * 一步一步来,要生成验证码图片,首先要有验证码,然后才能在画在图片上.为了能够灵活控制验证码, * 特别编写了SecurityCode类,它向外提供随机字符串.并且可以控制字符串的长度和难度. * SecurityCode类中提供的验证码分三个难度,易(全数字).中(数字+小写英文).难(数字+大小写英文). * 难度使用枚举SecurityCodeLevle表示,避

java web中图片验证码功能实现

用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer