`
lzlg302
  • 浏览: 6288 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

struts2与springmvc验证码

 
阅读更多
实现验证码的功能网上都比较的散,综合以前学的内容做一个总结,struts与springmvc都使用同一个ImagUtil.java,只是action不同。
当时学习的时候的一个ImageUtil.java如下
package com.zqw.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 验证码
 * @author Administrator
 *
 */
public class ImageUtil {
	
	private static final char[] chars = 
	{'0','1','2','3','4','5','6'
		,'7','8','9','A','B','C'
		,'D','E','F','G','H','I'
		,'J','K','L','M','N','O'
		,'P','Q','R','S','T','U'
		,'V','W','X','Y','Z'
	};
	
	private static final int SIZE = 4;
	private static final int LINES = 5;
	private static final int WIDTH = 80;
	private static final int HEIGHT = 30;
	private static final int FONT_SIZE = 28;
	
	public static Map<String,BufferedImage> createIamge(){
		BufferedImage image = new BufferedImage
		(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		g.setColor(Color.LIGHT_GRAY);
		g.fillRect(0, 0, WIDTH, HEIGHT);
		//随机获取4位字符
		Random r = new Random();
		StringBuilder sp = new StringBuilder();
		for(int i=0;i<SIZE;i++){
			int index = r.nextInt(chars.length);
			g.setColor(getRandomColor());
			g.setFont(new Font(null,Font.ITALIC,FONT_SIZE));
			g.drawString(chars[index]+"", (i)*WIDTH/SIZE, HEIGHT/2+7);
			sp.append(chars[index]);
		}
		
		// 画干扰线
		for (int i = 1; i <= LINES; i++) {
			g.setColor(getRandomColor());
			g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT),
					r.nextInt(WIDTH), r.nextInt(HEIGHT));
		}
		
		
		Map<String,BufferedImage> map = 
			new HashMap<String,BufferedImage>();
		map.put(sp.toString(), image);
		return map ;
	}
	
	public static Color getRandomColor() {
		Random ran = new Random();
		Color color = new Color(ran.nextInt(256), ran.nextInt(256),
				ran.nextInt(256));
		return color;
	}
	
	
	public static InputStream getInputStream(BufferedImage image){
		//压缩内存映像图片		
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
		//压缩图片
		try {
			encoder.encode(image);
		} catch (ImageFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		InputStream input = new ByteArrayInputStream(bos.toByteArray());
		return input;
	}

}

struts框架下:
生成验证码的CheckCodeActionStruts.java
package com.zqw.web.action;

import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.Map;

import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.zqw.netctoss.util.ImageUtil;
@Controller
public class CheckCodeActionStruts {
	private InputStream input;
	public String execute(){
		
		Map<String,BufferedImage> map = ImageUtil.createIamge();//产生图片
		String code = map.keySet().iterator().next();
		BufferedImage image = map.get(code);
		ActionContext actionContext = ActionContext.getContext();
		Map session = actionContext.getSession();
		session.put("code", code);
		input = ImageUtil.getInputStream(image);//压缩图片并输出
		return "success";
		
	}
	public InputStream getInput() {
		return input;
	}
}

struts.xml的配置
		<action name="checkCode" class="com.zqw.web.action.CheckCodeActionStruts">
			<result type="stream">
				<param name="inputName">input</param>
			</result> 
		</action>

springMVC框架下只是action稍有不同,springMVC框架下:
package com.zqw.web.action;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.zqw.netctoss.util.ImageUtil;
@Controller("checkCodeActionSpringMVC")
public class CheckCodeActionSpringMVC {
	@RequestMapping(value="/checkCode.do" )
	public void execute(HttpServletRequest req,HttpServletResponse resp) throws IOException{	
		Map<String,BufferedImage> map = ImageUtil.createIamge();//产生图片
		String code = map.keySet().iterator().next();
		BufferedImage image = map.get(code);
		req.getSession().setAttribute("code", code);
	       ServletOutputStream sos = resp.getOutputStream(); 
	        ImageIO.write(image, "jpeg", sos); 
	        sos.close(); 
	}
}

都使用相同的前台页面,点击更换图片则是参考网上的写法。
   	   		 function changeImg() { 
        var imgSrc = $("#imgObj"); 
        var src = imgSrc.attr("src"); 
        imgSrc.attr("src", chgUrl(src)); 
    } 
    //时间戳     
    //为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳     
    function chgUrl(url) { 
        var timestamp = (new Date()).valueOf(); 
        url = url.substring(0, 17); 
        if ((url.indexOf("&") >= 0)) { 
            url = url + "×tamp=" + timestamp; 
        } else { 
            url = url + "?timestamp=" + timestamp; 
        } 
        return url; 
    } 
   		</script>


                    <td class="login_info">验证码:</td>
                    <td class="width70"><input name="checkCode" type="text" class="width70" /></td>
                    <td>[img]checkCode" alt="验证码" id="imgObj" onclick="changeImg()[/img]</td>  
                    <td><span class="required"></span><br></td>              
                </tr>        


如图:

  • 大小: 17.6 KB
0
0
分享到:
评论

相关推荐

    struts2+spring整合登陆验证经典完整案例!

    struts2+spring整合登陆验证经典完整案例!期余JAR文件在struts2+spring整合登陆验证经典完整案例!(JAR)这个中,免积分下载! 部署Web应用请按如下步骤进行: 1. 进入reg_login路径下,将mysql.sql脚本中的语句...

    基于web的问卷调查系统源码.zip

    这是一个关于基于Web的问卷调查系统的源码包,主要采用了Java技术栈进行开发,结合了SSM(Spring、SpringMVC、MyBatis)和SSH(Struts2、Spring、Hibernate)两大主流框架。这个系统可能适用于高校毕业生的课程设计...

    java-springmvc-mybatis-easyui

    java-springmvc-mybatis-easyuiSpringMvc3.2.x+mybatis3.1.x+EasyUI1.3.4+Maven架构的示例程序根据 修改而来,在此基础上添加jcaptcha图形验证码。SSHE项目为Struts2.3.x+Spring3.2.x+Hibernate4.2.x+CXF2.7.x+...

    itcaststore.rar

    前端可能使用HTML、CSS和JavaScript,而后台可能采用SpringMVC或Struts2等框架,处理HTTP请求并返回响应数据。 六、数据库设计与管理 项目中必然涉及到数据库的设计和管理,可能包括用户信息表、商品信息表、订单...

    java技术点

    13. **项目国际化**:Struts2或SpringMVC的国际化支持。 14. **数据校验**:Struts2的Validator,Spring的Validation。 15. **网络蜘蛛**:爬虫技术,网页抓取。 16. **对象缓存**:内存缓存机制,如Ehcache。 17. *...

    JavaEE全套API新版.zip

    所以这次重新上传一次,相对于上次进行了一些整理(前端后台数据库API分类),并且增加了json,java验证码,Oracle数据库api.chm,以及后端框架的api,包括hibernate,struts2,spring,mybatis,springMVC

    Lerx 网站内容管理系统 v5.5.zip

    Lerx CMS V5版(以下简称V5版)采用了基于Java的SpringMVC框架,抛弃了V2-V3版本使用的Struts 2。SpringMVC框架更加安全、稳定。ORM持久化框架依旧使用Hibernate,版本为5.4。开发时采用的数据库为MySQL。是一个能快速...

    java8源码-Delta:一个轻量的MVC框架,上手简单,适用于小型JavaWeb项目快速开发

    java8 源码 Delta - A lightweight java web framework 什么是 ...是一个基于MVC架构的轻量级WEB开发框架,基于jdk1.8开发,目前最新...如果您对SpringMVC、Struts2等框架已经有所了解,同时又很想快速体验Delta Framewor

    xmljava系统源码-javaweb1024-cluster:javaweb1024-集群

    SpringMVC FreeMarker Mybatis Kaptcha(Google验证码) Druid(数据源) Atomikos(数据源事物) SpringCache(缓存集成redis) Shrio(权限控制,可以精确到按钮级别,集成redis) Redis(缓存服务器) Log4j Maven Generator...

    1剑盛二面准备试题.txt1剑盛二面准备试题.txt

    70. **SpringMVC与Struts的区别**:SpringMVC是一个更轻量级的Web框架,与Spring框架的整合度更高,提供更好的性能。Struts是一个基于MVC模式的重量级框架。 71. **避免SQL注入的方法**:使用预处理语句...

Global site tag (gtag.js) - Google Analytics