Spring_验证码的实现

验证码的作用:

       区分用户是计算机或人的程序,防止别人暴力对你的程序进行破坏。

验证码的实现原理:

        主要就是 图片的src 设置了,验证码的导入方式,src可以是jsp,可以是html等等。

以4位数的随机数验证码进行解析。

        四位数的随机数验证码:出现的分别为0-9,以及 a-z,A-Z等等。主要采用的就是Random类,例如 随机产生一个Integer值,我们将它转换为 16进制的数字,之后 就是 将这个进制的数字 截取 0-3位,总共4为数字,然后将四位数字展示在图片中。

难点:

        1.如何将数据进行渲染到图片中

        2.点击图片,图片进行更新,但是请求一致,如果同一时间里面,点击上百次,那么请求可能出错,也就是图片不进行更换。

注:如果一个请求处理时间为4秒,那么第一秒点击,和第3秒点击可能以为是同一个请求。

验证码难点破解:

        1. 数据渲染:BufferedImage(画布), Graphics(绘画工具)

        2.我们在请求的后面,添加一个随机数,作为请求的参数,但是处理url的时候,可以不需要管它。

验证码的实现:

 图片产生器(jsp文件):

//create the image
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// create the Graphics 
Graphics g = image.getGraphics();
	
// create a random instance to generate the codes
Random rdm = new Random();

// 将产生的数据 转换为 16 进制的数字
Integer number = rdm.nextInt();
String hash1 = Integer.toHexString( number );

// generate a random code
String capstr = hash1.substring(0, 4);

// 随机的四位数字(后端验证使用)
session.setAttribute("vcode", capstr);
	
// 设置颜色 、字体样式、
g.setColor(new Color(0, 100, 0));
g.setFont(new Font("Candara", Font.BOLD, 24));
	
// 数据渲染到图片上面
g.drawString(capstr, 8, 24);
	
// 关闭 window 界面使用资源
g.dispose();
	
// 通过response的方式,输出到window的浏览器界面去
response.setContentType("image/jpeg");

// 清除之前的内容
out.clear();

// 更新pagContext下面的OutStream()方法
out = pageContext.pushBody();

OutputStream strm = response.getOutputStream();
ImageIO.write(image, "jpeg", strm);

// 关闭相关资源	
strm.close();

图片渲染方式:

<input type="text" id="inputCode" class='CUIydentifyCode'/>
<!-- ${pageContext.request.contextPath}/validatecode 内部的一个请求:表示validatecode.jsp界面   -->
<!-- 添加  Math.random();的理由是,防止请求方式+名字一致,然后多次请求,导致请求失效问题 -->
<img id="code" src="${pageContext.request.contextPath}/validatecode" onclick="javascript:document.getElementById('code').src='${pageContext.request.contextPath }/validatecode?' + Math.random();" /></p>

后端处理渲染方式:

/**
	 * 图片验证
*/
@RequestMapping("/validatecode")
public ModelAndView validatecode(HttpServletRequest request, ModelMap modelMap) {
    	return  createModelAndView("/validatecode",modelMap);
}

/**
  *  * 生成一个ModelAndView(注意你的jsp在项目的位置,毕竟viewName是要和视图解析器结合处理的。)
*/
public createModelAndView(String viewName , ModelMap modelMap){
		super( BASE_VIEW_NAME + viewName , modelMap ) ;  
		Log.debug("viewName=" + BASE_VIEW_NAME + viewName ) ; 
}

 

以上就是 四位数的随机数的产生。需要注意的就是 Graphics 的一些函数的使用,就OK了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值