Spring MVC 验证码
页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'code.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function changeImg() {
var imgSrc = $("#imgObj");
var src = imgSrc.attr("src");
//alert(src);
imgSrc.attr("src", chgUrl(src));
alert($("#code").val());
//$("#code").val("123456");
//<c:out value="${sessionScope.code}"/>
}
//时间戳
//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳
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;
}
function refresh(obj) {
obj.src = "code.html";
}
</script>
</head>
<body>
验证码<input id="index_code" name="code" type="text" />
<img id="imgObj" alt="验证码" src="code.html" οnclick="javascript:changeImg();" />
<!-- <a href="" οnclick="changeImg()"οnclick="javascript:refresh(this);">换一张</a> -->
<input type="button" οnclick="javascript:changeImg();" value="看不清换一张">
<input type="hidden" value="123456" id="code"/>
</body>
</html>
后台
/**
* 用户验证码
* @author Administrator
*
*/
@Controller
public class CodeController {
private int width = 90;//定义图片的width
private int height = 20;//定义图片的height
private int codeCount = 4;//定义图片上显示验证码的个数
private int xx = 15;
private int fontHeight = 18;
private int codeY = 16;
char[] codeSequence = {
'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',
'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',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
@RequestMapping("/code")
public void getCode(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//Graphics2D gd = buffImg.createGraphics();
//Graphics2D gd = (Graphics2D) buffImg.getGraphics();
Graphics gd = buffImg.getGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
gd.setColor(Color.WHITE);
gd.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.BOLD, fontHeight);
// 设置字体。
gd.setFont(font);
// 画边框。
gd.setColor(Color.BLACK);
gd.drawRect(0, 0, width - 1, height - 1);
// 随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。
gd.setColor(Color.BLACK);
for (int i = 0; i < 40; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
gd.drawLine(x, y, x + xl, y + yl);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码。
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String code = String.valueOf(codeSequence[random.nextInt(62)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用随机产生的颜色将验证码绘制到图像中。
gd.setColor(new Color(red, green, blue));
gd.drawString(code, (i + 1) * xx, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(code);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
System.out.println(randomCode);
session.setAttribute("code", randomCode.toString());
// 禁止图像缓存。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
/**********************************调到验证码**************************************/
@RequestMapping("/tocode")
public ModelAndView tologin(HttpServletRequest request,HttpServletResponse response) {
ModelAndView mav = new ModelAndView();
mav.setViewName("/user/code");
return mav;
}
}
Spring MVC 验证码相关推荐
- Spring MVC 中使用 Google kaptcha 验证码
验证码是抵抗批量操作和恶意登录最有效的方式之一. 验证码从产生到现在已经衍生出了很多分支.方式.google kaptcha 是一个非常实用的验证码生成类库. 通过灵活的配置生成各种样式的验证码,并将 ...
- kaptcha 验证码在spring mvc 中的使用
转自:http://ttaale.iteye.com/blog/808719 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的 ...
- Spring mvc 中使用 kaptcha 验证码
2019独角兽企业重金招聘Python工程师标准>>> 生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptc ...
- Java Web(11) Spring MVC 返回Json
2019独角兽企业重金招聘Python工程师标准>>> 1. 首先是对Spring mvc 进行xml配置 <?xml version="1.0" enco ...
- Spring mvc-kaptcha 验证码
2019独角兽企业重金招聘Python工程师标准>>> 生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptc ...
- Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...
- 如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha
如何使用recaptcha CAPTCHA是一个程序,可以生成人类可以通过但计算机程序" 不能 "通过的测试并对其进行评分. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用 ...
- 在Spring MVC Web应用程序中使用reCaptcha
CAPTCHA是一种程序,可以生成人类可以通过的测试并对其进行评分,而计算机程序" 不能 "通过. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用户应在输入区域中书写文本. ...
- Spring MVC 文件上传 文件下载
索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...
最新文章
- 用C#实现支持gmail邮件发送
- PKUWC 2018 滚粗记
- Openssl搭建私有CA认证
- Java的深度:通过协方差暴露的API泄漏
- gcc学习(一)[第二版]
- 05 - 雷达的发展与应用
- 【线性系统理论】0.线性系统基本概念(1)
- Cypress Test
- Discuz仿魔客吧模板/素材资源站模板/包含DIY文件
- cmf php,php cmf
- 聚名企服商标注册流程及资料(2022新版新手教程)
- [组合计数] BZOJ 3505 [Cqoi2014]数三角形
- 又一块遮羞布被撕了,5G的发展还是得靠手机用户
- ios 自带录屏框架replayKit的使用
- Objective-C runtime机制(5)——iOS 内存管理
- 绿色数据中心空调设计 书评_书评:响应式设计工作流程
- Hexo博客页脚添加ICP备案号
- 20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
- H5, 遇到的 ios 兼容性问题
- NOIP2018 提高组游记
热门文章
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波2 - 图像反转、对数变换
- windows上安装mysql5.7.24
- ES6学习笔记六(Iterator和for..of)
- Pandas CookBook -- 04选取数据子集
- SP和Fuction的关系
- centos7 时间设置
- Google推出“Google实验室” Ad Innovations
- keepalived mysql双主架构图_基于keepalived Mysql双主热备配置
- 全国计算机等级考试题库二级C操作题100套(第71套)
- 中文能用rsa加密吗_外文文献数据库能用中文词进行检索吗?