`

验证码的生成,并且“看不清,换一张”

阅读更多
public class AuthImg extends HttpServlet {
	private static final String CONTENT_TYPE = "text/html; charset=UTF-8";

	private Font mFont;

	public AuthImg() {
		mFont = new Font("Times New Roman", 0, 18);
	}

	public void init() throws ServletException {
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String authCode = genAuthCode(4);
		AuthCodeCookie authCodeCookie = new AuthCodeCookie(request, response);
		authCodeCookie.addAuthCode(authCode);//保存验证码到cookies
		response.setContentType("image/jpeg");
		javax.servlet.ServletOutputStream out = response.getOutputStream();
		int width = 60;
		int height = 20;
		BufferedImage image = new BufferedImage(width, height, 1);
		Graphics gra = image.getGraphics();
		Random random = new Random();
		gra.setColor(getRandColor(200, 250));
		gra.fillRect(1, 1, width, height);
		gra.setColor(getRandColor(160, 200));
		for (int i = 0; i < 155; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int xl = random.nextInt(12);
			int yl = random.nextInt(12);
			gra.drawLine(x, y, x + xl, y + yl);
		}

		gra.setFont(mFont);
		for (int i = 0; i < 4; i++) {
			char c = authCode.charAt(i);
			gra.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
			gra.drawString(String.valueOf(c), 13 * i + 6, 16);
		}

		gra.dispose();
		ImageIO.write(image, "JPEG", out);
	}

	Color getRandColor(int fc, int bc) {
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}

	public String genAuthCode(int length) {
		if (length < 1)
			return null;
		String strChars[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
		StringBuffer strPassword = new StringBuffer();
		int nRand = (int) Math.round(Math.random() * 100D);
		for (int i = 0; i < length; i++) {
			nRand = (int) Math.round(Math.random() * 100D);
			strPassword.append(strChars[nRand % (strChars.length - 1)]);
		}

		return strPassword.toString();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	public void destroy() {
	}

}


html:
function refresh() {
var img = document.getElementById("checkCodeImg");
now = new Date();
img.src = "authimg?code="+now.getTime();
}

<IMG height=18 src='authimg' id="checkCodeImg" >
<a href="#" onclick="javascript:refresh();">看不清,换一张</a>

web.xml:
<servlet>
    <servlet-name>authimg</servlet-name>
    <servlet-class>com.worthtech.app.servlet.AuthImg</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>authimg</servlet-name>
    <url-pattern>/authimg</url-pattern>
  </servlet-mapping>
分享到:
评论

相关推荐

    java完美的验证码生成

    - 使用JavaScript和Ajax技术,当用户点击“换一张”按钮时,发送异步请求到服务器获取新的验证码,无需刷新整个页面。 - 验证码的更新和验证都通过Ajax完成,提升用户体验。 6. **代码注释和操作方法**: - 为了...

    HTML表单验证码

    - **刷新功能**:提供一个“看不清?换一张”按钮,允许用户刷新验证码图片,以获取更清晰或更容易辨认的验证码。 - **时间限制**:设置验证码的有效期,过期后需要用户重新获取,防止被他人截取并重复使用。 - **...

    java验证码配置

    - 提供“看不清换一张”功能,让用户可以选择更换验证码。 - 优化验证码的刷新机制,例如使用Ajax技术实现实时刷新,提升用户体验。 3. **技术选型**: - 可以考虑使用开源验证码库,如Kaptcha等,它们提供了...

    asp.net验证码控件

    用户如果看不清当前的验证码,可以点击一个“换一张”按钮,控件会重新生成一个新的验证码图像。 总结来说,ASP.NET验证码控件是防止自动化攻击的重要工具,它简单易用,支持多种自定义选项,并且能够在不增加额外...

    常用的验证码的各种代码

    本文档主要介绍两种常见的验证码实现方式:一种是基于JSP的验证码生成方法,另一种则是基于Java的验证码生成逻辑。这两种方式均能有效防止自动化工具对网站进行恶意操作,增强系统的安全性。 #### JSP 实现验证码 ...

    Asp.net 实现验证码功能的Web控件

    该控件会在网页加载时生成一张包含随机字符的验证码图像。 4. **获取验证码字符信息** 为了验证用户输入的验证码是否正确,需要捕获控件的`GraphicOK`事件。在这个事件处理程序中,可以获取到生成的验证码字符串...

    基于asp.net mvc的图片滑动验证码,极限验证(0515).rar

    这个服务会生成两张随机的图片,一张是完整的背景图,另一张是覆盖在上面的部分图片。这两张图片会被合并成一张图片,并且覆盖部分会被随机切割出来,形成滑动验证码的基础。 接下来,开发者需要在ASP.NET MVC的...

    PHP生成各种常见验证码和Ajax验证过程

    验证码生成之后,通常需要在前端页面进行显示,并且能够实现刷新验证码的功能。这是通过Ajax来实现的。Ajax可以无刷新地与服务器进行通信,获取新的验证码图片,并将其显示在页面上。同时,提交表单时,也可以通过...

    VerifyCodeServlet(一次性验证码)

    为了提高用户体验,我们通常会提供一个 "换一张" 超链接,让用户在看不清验证码时获取新的验证码。在 JSP 页面中,我们可以使用 JavaScript(这里使用 jQuery 库)来改变 `&lt;img&gt;` 元素的 `src`,并且添加当前时间戳...

    java jsp 驗證碼

    - **刷新功能**:提供一个“看不清,换一张”的按钮,方便用户更换新的验证码。 - **时效性**:设置验证码的有效时间,避免长时间未使用的验证码被恶意使用。 总结起来,Java JSP验证码是Web开发中一种重要的安全...

    Android实现用文字生成图片的示例代码

    在实际应用中,这个示例代码可以用于生成各种文字图片,例如,生成验证码、生成二维码等。同时,这个示例代码也可以用于开发一些图片处理应用程序,例如,图片编辑器、图片处理软件等。 这个示例代码提供了一个简单...

    易想最新升级包V4.0

    12、修复人才首页不能自动生成; 13、修复人才小类不能删除问题; 14、修复人才职位信息不能按职位分类显示问题; 15、修复优化后台修改会员处编码问题; 16、修复供求二级页面相关类别推荐供求不显示问题; 17、...

    用ImageMagick/MagickWand将把字符串转为图片VC

    这种方法在开发过程中非常有用,特别是在需要动态生成文本图像的应用场景中,例如生成验证码、海报、图表等。 #### ImageMagick与MagickWand简介 - **ImageMagick**:是一种用于创建、编辑或合成位图图像的强大...

Global site tag (gtag.js) - Google Analytics