- 浏览: 96768 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
化蝶自在飞:
还是走腾讯应用宝吧.
微信扫二维码下载客户端被挡 -
hyper1987stone:
java敏感词过滤 -
菜鸟级JAVA:
先引用2个js(一个jquery、一个日期插件),然后在需要使 ...
java jsp 日期控件 -
woshishen__74:
你的有点问题 是不是少了一个jar包?????
java jsp 日期控件
先上图
我的这种方式由3部分代码组成:页面(html+js)、接口、工具类
1、页面代码如下:
2、接口代码
3、工具类(2个)
我的这种方式由3部分代码组成:页面(html+js)、接口、工具类
1、页面代码如下:
function getCode(code) { var imgSrc = $("#cimg"); imgSrc.attr("src", chgUrl(code)); } function chgUrl(url) { var timestamp = (new Date()).valueOf(); var url = url + "?timestamp=" + timestamp; return url; }
<span class="userType">验证码:</span> <input type="text" name="loginCode" class="loginCode" onBlur="checkregcode();" onFocus="regcodeE();" style="width: 40%;" /> <a href="javascript:void(0)" onclick="getCode('code.do')"> <i><img src="code.do" style="width: 35%; height: 15%; padding-top: -20px; vertical-align: middle;" id="cimg" /> </i> </a>
2、接口代码
package com.hzdracom.servlet; /** * * 生成验证码. * @author luozhenxing * * @date 2015-04-15 * * */ import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.hzdracom.util.ValidateCode; @Controller public class ValidateCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override @RequestMapping(value = "/code", method = RequestMethod.GET, produces = "text/json;charset=UTF-8") protected void doGet(HttpServletRequest reqeust, HttpServletResponse response) throws ServletException, IOException { // 设置响应的类型格式为图片格式 response.setContentType("image/jpeg"); //禁止图像缓存。 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); HttpSession session = reqeust.getSession(); ValidateCode vCode = new ValidateCode(120,40,4,0); session.setAttribute("code", vCode.getCode()); vCode.write(response.getOutputStream()); } }
3、工具类(2个)
package com.hzdracom.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; /** * 验证码生成器 * * @author hf */ public class ValidateCode { // 图片的宽度。 private int width = 160; // 图片的高度。 private int height = 40; // 验证码字符个数 private int codeCount = 5; // 验证码干扰线数 private int lineCount = 100; // 验证码 private String code = null; // 验证码图片Buffer private BufferedImage buffImg = null; // private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', // 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', '1', '3', '4', '5', '6', '7', // '8', '9' }; private char[] codeSequence = { '0', '1', '3', '4', '5', '6', '7', '8', '9' }; public ValidateCode() { this.createCode(); } /** * @param width 图片宽 * @param height 图片高 */ public ValidateCode(int width, int height) { this.width = width; this.height = height; this.createCode(); } /** * @param width 图片宽 * @param height 图片高 * @param codeCount 字符个数 * @param lineCount 干扰线条数 */ public ValidateCode(int width, int height, int codeCount, int lineCount) { this.width = width; this.height = height; this.codeCount = codeCount; this.lineCount = lineCount; this.createCode(); } public void createCode() { int x = 0, fontHeight = 0, codeY = 0; int red = 0, green = 0, blue = 0; x = width / (codeCount + 2);// 每个字符的宽度 fontHeight = height - 2;// 字体的高度 codeY = height - 4; // 图像buffer buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 生成随机数 Random random = new Random(); // 将图像填充为白色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 创建字体 ImgFontByte imgFont = new ImgFontByte(); Font font = imgFont.getFont(fontHeight); g.setFont(font); for (int i = 0; i < lineCount; i++) { int xs = random.nextInt(width); int ys = random.nextInt(height); int xe = xs + random.nextInt(width / 8); int ye = ys + random.nextInt(height / 8); red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); g.setColor(new Color(red, green, blue)); g.drawLine(xs, ys, xe, ye); } // randomCode记录随机产生的验证码 StringBuffer randomCode = new StringBuffer(); // 随机产生codeCount个字符的验证码。 for (int i = 0; i < codeCount; i++) { String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]); // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。 red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); g.setColor(new Color(red, green, blue)); g.drawString(strRand, (i + 1) * x, codeY); // 将产生的四个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 code = randomCode.toString(); } public void write(String path) throws IOException { OutputStream sos = new FileOutputStream(path); this.write(sos); } public void write(OutputStream sos) throws IOException { ImageIO.write(buffImg, "png", sos); sos.close(); } public BufferedImage getBuffImg() { return buffImg; } public String getCode() { return code; } }
package com.hzdracom.util; import java.io.ByteArrayInputStream; import java.awt.*; /** * ttf字体文件 * * @author hf */ public class ImgFontByte { public Font getFont(int fontHeight) { try { Font baseFont = Font.createFont(Font.TRUETYPE_FONT, new ByteArrayInputStream(hex2byte(getFontByteStr()))); return baseFont.deriveFont(Font.PLAIN, fontHeight); } catch (Exception e) { return new Font("Arial", Font.PLAIN, fontHeight); } } private byte[] hex2byte(String str) { if (str == null) return null; str = str.trim(); int len = str.length(); if (len == 0 || len % 2 == 1) return null; byte[] b = new byte[len / 2]; try { for (int i = 0; i < str.length(); i += 2) { b[i / 2] = (byte) Integer.decode("0x" + str.substring(i, i + 2)).intValue(); } return b; } catch (Exception e) { return null; } } /** * ttf字体文件的十六进制字符串 * @author hf * @return */ private String getFontByteStr() { return "0001000000100040000400c04f532f327d8175d4000087740000005650434c5461e3d9fb00008"; } }
发表评论
-
Highcharts 圆饼图demo
2017-02-28 14:38 736<div id="container& ... -
用java代码发送邮件(优化版)
2017-02-28 10:10 708调用代码如下: if(!StringUtil.isNull ... -
java读取配置文件信息
2017-01-06 16:18 10841、先引包 import java.io.Buffered ... -
java数字转汉语读法
2015-08-28 10:22 847看到好的东西就想收藏一份,说不定自己哪天就用的上了。 ... -
java正则验证数字、邮箱格式、字符串
2015-08-28 10:00 2315用java代码正则验证数字、邮箱格式、字符串的一些工具类方法 ... -
一个简易的线程池示例
2015-08-07 17:39 511package thread.pool; impor ... -
Thread里面使用@resource失败,对象为null
2015-07-02 15:10 4590spring 在Thread中注入@Resource失败,总为 ... -
javascript字符串验证大全
2015-07-02 10:56 609/*不错的JS验证~~~~~~~~~~ ... -
用java代码发送邮件 附件
2015-06-29 18:30 4243PS:3种示例的代码都在附件压缩包里,每个包一种示例,独立运行 ... -
给页面表单第一列添加序号
2015-06-11 11:06 896给表单第一列添加序号(此方法可以放到公共js文件中,多个页面引 ... -
页面优化(聚焦下拉框、回车调用按钮)
2015-06-04 11:32 812页面优化(聚焦下拉框、回车调用按钮) $(function ... -
jsp页面之间的跳转和返回
2015-05-29 09:39 16031、点击按钮跳转到新的页面 <a href=&quo ... -
设置input标签成只读
2015-05-28 14:31 1276设置input标签的内容为只读: 1、脚本中对应的属性为obj ... -
页面回车时默认按钮被点击
2015-04-27 10:44 733在某些情况页面中(如:登陆、注册、查询),很多人在输入数据后习 ... -
查看class文件是被jdk什么版本编译的
2015-04-24 18:24 1098package image; import java ... -
下拉框被选中
2015-04-15 11:19 515<select name="provinc ... -
微信扫二维码下载客户端被挡
2015-03-20 12:36 1200项目里有一个扫二维码下载客户端的功能,扫码直接调用下载链接地址 ... -
post ajax 同步 异步请求
2015-03-04 11:41 11781、$.post 默认都是异步请求,如果一个地方同时发起几个请 ... -
maven+springMVC+mybatis+junit详细搭建过程
2015-02-28 16:16 877springMVC+mybatis框架搭建 首先我们先要弄清搭 ... -
Base64编码解码
2015-02-27 16:53 599package util; import java. ...
相关推荐
在如梦CMS中,我们可以利用SpringMVC的拦截器机制来实现在特定页面添加验证码。创建一个验证码服务类,生成并保存验证码,然后在需要验证的控制器方法前设置拦截器,检查用户输入的验证码是否与服务器生成的一致。...
5. **添加噪声**:为了混淆验证码,可以在图像上添加一些随机的线条或点,这可以通过在`Canvas`上随机绘制像素来实现。 6. **扭曲变形**:可选地,我们可以对验证码进行轻微的扭曲,比如改变字符之间的距离或者略微...
本案例分析将深入探讨如何在已有登录系统的基础上添加验证码功能,以增强用户认证的安全性。 首先,我们需要理解验证码的基本流程。当用户尝试登录时,系统会生成一个随机的验证码图像,并将其存储在服务器端的`...
本压缩包提供的资源就是为了解决这个问题,它包含了一个用于在JSP页面中实现验证码功能的.NET代码示例。 验证码(CAPTCHA)是一种用于防止恶意自动程序(如机器人)进行欺诈性操作的技术,它要求用户通过图形识别出...
js实现页面随机生成验证码(验证码混淆)-附件资源
本项目着重于JSP页面上的验证码生成,结合后台Java代码,提供了一个完整的解决方案。 首先,验证码的核心在于其随机性和不可预测性。在JSP页面上,通常会有一个专门的图片元素显示验证码。这个图片是由服务器动态...
最方便kaptcha验证码jar包,给页面添加验证码图片。
2. **图像处理**:验证码通常以图像形式展示,图像中的验证码字符可能会扭曲、变形、旋转,甚至添加噪声或条纹,以增加识别难度。 3. **字体混搭**:使用不同的字体、大小和颜色来绘制验证码字符,进一步混淆机器...
在本主题中,我们将深入探讨如何使用JavaScript实现一个页面动态验证码。验证码的主要目的是防止自动化的机器人程序对网站进行恶意操作,例如批量注册、垃圾评论等。 验证码通常包括一些随机生成的字符或数字,用户...
- **绘制验证码**:在图像上随机位置绘制验证码字符串,同时添加一些噪声线和点,提高机器识别的难度。 - **扭曲图像**:为了增加复杂性,可以对图像进行扭曲,如旋转、缩放或倾斜,`Graphics`类提供了相关方法。 ...
页面JS生成验证码是一种常见的网页安全措施,用于防止恶意自动化脚本或机器人进行非法操作,如批量注册、恶意登录等。这种技术通常结合图像处理和JavaScript动态生成,使得每个用户看到的验证码都是独一无二的,需要...
4. **在网页中显示验证码**:在ASP.NET网页中,添加一个`<asp:Image>`控件,并设置其`ImageUrl`属性指向生成验证码的网页URL。这样,每次请求该URL时,都会重新生成一个新的验证码。 5. **验证用户输入**:当用户...
在开发Web应用时,为了增加安全性,通常会在用户登录界面添加验证码功能,防止恶意自动化的登录尝试或机器人攻击。在本教程中,我们将探讨如何在JSP(Java Server Pages)中实现这一功能。 首先,我们需要了解JSP的...
在ASP.NET项目中,可以直接将此类库文件添加到项目的引用中,以便在页面上使用这个控件。将.dll文件复制到项目的`bin`目录下,这样项目就能识别并使用这个控件。 接下来,我们需要在`Web.config`文件中进行配置。`...
标题中的“extjs 登录页面+验证码”表明我们要讨论的是使用ExtJS框架构建的一个登录页面,其中包含了验证码功能。ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序,它提供了丰富的用户界面组件和强大的...
JSP实现登录功能的过程中添加验证码是一项重要的安全措施,可以有效防止自动化工具和机器人对登录接口的恶意攻击。验证码可以是一串字符、图形或者两者的结合,要求用户在登录时输入这串字符来证明自己是真实用户而...
"JAVA实现注册页面验证码刷新"的课题旨在探讨如何在Java后端生成并更新前端显示的验证码,确保每次用户请求时都能显示新的、随机生成的验证码。下面将详细介绍这个过程涉及的关键知识点。 1. **验证码的生成**: -...
在网页开发中,验证码是一种常见的安全机制,用于防止恶意自动化的机器人或爬虫进行非法操作,比如批量注册、登录等。...通过这些步骤,我们可以实现一个基本的登录页面验证码功能,有效提高了系统安全性。
可以使用`System.Drawing`命名空间下的类,如`Bitmap`、`Graphics`和`Font`,来创建一个新的图像,绘制验证码字符串,并添加一些噪声线和扭曲效果,增加识别难度。 4. **无刷新更换**:实现无刷新更换验证码,通常...
### ASP.NET 页面上添加验证码详解 #### 一、引言 在现代Web应用开发中,为了防止自动化工具或脚本对网站进行恶意攻击或者滥用,验证码(CAPTCHA)成为了一种常用的验证方式。本文将详细介绍如何在ASP.NET Web应用...