今天在写一个页面的时候用到了验证码,就自己搞了一下,随便发出来,方便大家参考使用,不对的请指正!
首先在ssm的common的工具包中增加一个生成验证码的类:

import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;public class CodeUtil {/*** 绘画验证码** @param output* @return*/public String drawImg(ByteArrayOutputStream output) {String code = "";// 随机产生4个字符for (int i = 0; i < 4; i++) {code += randomChar();}int width = 70;int height = 27;BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_3BYTE_BGR);Font font = new Font("Times New Roman", Font.PLAIN, 20);// 调用Graphics2D绘画验证码Graphics2D g = bi.createGraphics();g.setFont(font);Color color = new Color(66, 2, 82);g.setColor(color);g.setBackground(new Color(226, 226, 240));g.clearRect(0, 0, width, height);FontRenderContext context = g.getFontRenderContext();Rectangle2D bounds = font.getStringBounds(code, context);double x = (width - bounds.getWidth()) / 2;double y = (height - bounds.getHeight()) / 2;double ascent = bounds.getY();double baseY = y - ascent;g.drawString(code, (int) x, (int) baseY);g.dispose();try {ImageIO.write(bi, "jpg", output);} catch (IOException e) {e.printStackTrace();}return code;}/*** 随机参数一个字符** @return*/private char randomChar() {Random r = new Random();String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";return s.charAt(r.nextInt(s.length()));}
}

控制器中的验证码的方法:

/*** @function 加载登录页面* @return*/@RequestMapping(value = "/login", method = RequestMethod.GET)public String login(){return "login";}/*** 获取验证码** @param response* @param session*/@RequestMapping("/getVerifyCode")public void generate(HttpServletResponse response, HttpSession session) {ByteArrayOutputStream output = new ByteArrayOutputStream();CodeUtil codeUtil = new CodeUtil();String verifyCodeValue = codeUtil.drawImg(output);System.out.println(verifyCodeValue);session.setAttribute("verifyCode", verifyCodeValue);try {ServletOutputStream out = response.getOutputStream();output.writeTo(out);} catch (IOException e) {e.printStackTrace();}}/*** @function 登录验证* @param teacher* @param session* @return*/@RequestMapping(value = "/login_sub", method = RequestMethod.POST)@ResponseBodypublic Msg login_sub(Teacher teacher, HttpSession session, @RequestParam("code") String code){String verifyCode= (String) session.getAttribute("verifyCode");if(!code.equalsIgnoreCase(verifyCode)){return Msg.fail().add("msg", "验证码错误!");}else{Teacher teacher1 = teacherService.checkLogin(teacher);if(teacher1 != null){session.setAttribute("teacher", teacher1);return Msg.success().add("msg", "欢迎登录");}else{return Msg.fail().add("msg", "用户名或者密码错误!");}}}

最后就是前端的html代码了!

<!DOCTYPE html>
<HTML  xmlns="http://www.thymeleaf.org"><head><meta charset="utf-8" /><title>例子</title><link type="text/css"  data-th-href="@{/static/css/index.css}" rel="stylesheet"  /></head><body><div class="login_wall"><div class="login_logo"><img class="login_img" data-th-src="@{/static/images/logo.png}"></div><div class="login_main"><span class="login_span fl"><img data-th-src="@{/static/images/login_07.png}" width="422" height="322"></span><div class="login_dl fr"><form ><span><img data-th-src="@{/static/images/login_j_03.png}">登录<a class="fr" data-th-href="@{/register}">注册</a></span><p><em>账 号:</em><input type="text" name="username"></p><p><em>密 码:</em><input type="text" name="password"></p><p><em>验证码:</em><input type="text" name="code" style="width:134px;  height:27px;"><img data-th-src="@{/getVerifyCode}" style="margin-left:5px" id="Img" onclick="changeCode();"></p><input type="button" value="确定" id="login_btn"/></form></div><div class="clear"></div></div></div></body><script type="text/javascript" data-th-src="@{/static/js/jQuery1.7.2.js}"></script><script type="text/javascript" data-th-inline="javascript">/*<![CDATA[*/// 获取当前时间function genTimestamp() {var time = new Date();return time.getTime();}// 点击获取验证码function changeCode() {$("#Img").attr("src", "/getVerifyCode?t=" + genTimestamp());}// 点击登录$("#login_btn").click(function(){var username = $("input[name='username']").val();var password = $("input[name='password']").val();var code = $("input[name='code']").val();if(username != "" && password != ""){var data = {"username":username, "password": password};// console.log(data); return false;$.post("/login_sub?code="+code, data, function(res){// console.log(res); return false;if(res.code == 100){alert(res.extend.msg);location.href = "/index";}})}else{alert("用户名和密码未填写!");}})/*]]>*/</script>
</html>

具体过程:
现用工具类创建一个验证码的图片,将其放在response对象流中,在将code值放在session中,在前台显示,点击刷新是的时候增加时间戳,防止缓冲;在进行验证的时候对在session中保存的code与提交的code进行比较验证过在验证用户名密码。

ssm 登录验证码使用相关推荐

  1. Python - WebDriver 识别登录验证码

    Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...

  2. SpringBoot 实现登录验证码(附集成SpringSecurity)

    SpringBoot 实现登录验证码 1. 生成验证码的工具类 2. 验证码测试接口 3. 验证码过滤器 4. Spring Security配置类引入验证码过滤器 5. 效果图 1. 生成验证码的工 ...

  3. php实现登录验证码_PHP实现登录验证码功能

    本篇文章主要介绍PHP如何编写登录验证码的功能,感兴趣的朋友参考下,希望对大家有所帮助. 在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能.session_star ...

  4. 通过Cookie跳过登录验证码【限cookie不失效有用】

    验证码,相信每个写web自动化测试的同学来说,都是个头疼的事,怎么办呢? 方法还是有的,先说今天这种方式,通过cookie绕过登录验证码 思路: 需要你通过抓包工具抓到你登录的cookie 接下来开始 ...

  5. 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)

    文章标题 一.Bs4搜索文档树 二.CSS选择器 三.selenium基本使用 四.无界面浏览器 五.selenium其他使用 1)自动登录百度案例 2)获取位置属性大小.文本 3)自动获取12306 ...

  6. java 登录验证码_java实现登录验证码

    本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...

  7. 浙大教务网登录验证码自动填充--chrome插件开发

    浙大教务网登录验证码自动填充--chrome插件开发 一.前言 二.验证码图像识别 三.chrome插件开发 四.插件使用和结果展示 五.未来展望 六.提示 一.前言 女朋友说"教务网每次登 ...

  8. 如何通过PHP语言设计出登录验证码(条型码)

    验证码生存的形式有许多种类,选择一个不错的验证码是我们客户体验的重要工作: 那么如何实现用PHP语言设计出登录验证码呢? 今天我们就为大家来普及一下,关于这段代码,知码网与大家一起分享: 知码网是一家 ...

  9. 12306登录验证码识别

    最近在研究12306验证码识别,前期的12306查询验证码识别已经上线了,详见http://download.csdn.net/download/ghost_man_/10160932的博客,里面的1 ...

最新文章

  1. EMC设计中电缆屏蔽使用方法
  2. 女程序员也有35岁危机焦虑吗?
  3. PCL-1.8.1从源码搭建开发环境二(FLANN库的编译)
  4. mac下idea 13 在tomcat 7控制台乱码
  5. 随手小记:快速适应未必是个好策略
  6. 程序员的快速成长之路
  7. 2.Pycharm + Django + Python进行WEB路由配置
  8. dialog对话框初始化 mfc_MFC添加子对话框及如何初始化
  9. hdu 1394 Minimum Inversion Number
  10. 解决Ubuntu18无法连接Airpods、蓝牙耳机的问题
  11. 计算机专业技术面试题
  12. log日志查看软件logviewer-pro
  13. 批量给pdf加水印,请用这个办法
  14. 720P、1080P、4K是什么意思?
  15. spine 导出纹理_Spine 的纹理打包器(texture packer)详解
  16. 密码学--认证协议(Authentication Protocol)分类
  17. 微信公众号html在线编辑器,【微信公众平台工具开发】雷人微信网页编辑器
  18. cnblogs!I'm comeing!
  19. 从 Quora 的 187 个问题中学习机器学习和NLP
  20. UOJ #115. 【UER #2】谣言的传播

热门文章

  1. wenxue city
  2. 【淘宝购物车】测试用例设计
  3. 世纪华通2020年业绩持续领先:商业模式愈发成熟,优秀质地突出
  4. 计算机基础知识表格怎么加密,电脑excel表格的密码加密功能怎么使用
  5. ctf misc 图片隐写(所见非真)
  6. 奔腾64位计算机,电脑Intel奔腾e6700 cpu参数能用64位win7系统吗
  7. ffmpeg新版本解码API overview
  8. 搭建自己的 服务端渲染 SSR
  9. ps实时改变选中区域的颜色(纯颜色)
  10. python编码错误:UnicodeDecodeError: 'utf8' codec can't decode