找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 44995|回复: 0

java实现简单验证码案例

[复制链接]

20

主题

13

回帖

355

积分

管理员

积分
355

活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主论坛元老

发表于 2020-3-28 20:26:28 | 显示全部楼层 |阅读模式
工具类代码
  1. public class NubmerToJpgUtil {
  2.         public static String NumberToJpgUtil(OutputStream outputStream) throws IOException{
  3.                 Random rd = new Random();
  4.                 BufferedImage img = new BufferedImage(140, 50, BufferedImage.TYPE_INT_BGR);
  5.                 Graphics g = img.getGraphics();
  6.                 g.setFont(new Font("宋体", Font.BOLD, 60));
  7.                 String number = String.valueOf(rd.nextInt(10000));
  8.                 g.drawString(number, 10, 50);
  9.                 ImageIO.write(img, "jpg", outputStream);
  10.                 return number;
  11.         }
  12. }
复制代码
工具类的实现主要思想是将一串随机数用java的graphics对象画在图片上面,然后将写出到方法传入的输入流中实现输出,最后将验证码的数值作为返回值返回。如果需要加强验证码的强度,可以在数字或字母的绘画上进行旋转和平移,或者添加一些干扰线。
后端代码
  1. @RequestMapping(value = "changevarcode")//更换验证码
  2.         public void changevarcode(HttpSession session,HttpServletResponse res) throws IOException {
  3.                 //写出到response的输出流中
  4.                 String varcodenumber = NubmerToJpgUtil.NumberToJpgUtil(res.getOutputStream());
  5.                 session.setAttribute("varcodenumber",varcodenumber);
  6.         }
复制代码
后端主要流程是把servlet的response的输出流调出作为输出流调用工具类的方法,并把返回的验证码的值存入到session中方便验证方法调用。
前端代码
  1. <img onclick="changevarcode()" id="varcodeimg" alt="验证码" src="changevarcode.do">
复制代码
js代码
  1. function changevarcode(){
  2.                 var src = "changevarcode.do?t="+new Date().getTime();
  3.                 $("#varcodeimg").attr("src",src);
  4.         }
复制代码
js作用是每次点击验证码时更换验证码,如果将原有的图片src值进行更改,浏览器将会把更改后的图片立即展示出来,这是浏览器的特性。这里主要是获取当前时间作为不同的src参数传给相同后端,每次浏览器访问新的映射就会产生新的不同的验证码,并更改验证码的正确值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|三春晖 ( 京ICP备19050777号-1 )

GMT+8, 2024-11-25 11:10 , Processed in 0.036962 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表