验证码在页面的使用

包括验证码的图片生成,服务器对验证码的对比确认。
一、生成验证码图片的服务器端Servlet

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;

public class PicCodeServlet extends HttpServlet {
	// 验证码图片的宽度。
	 private int width=60;
	 // 验证码图片的高度。
	 private int height=20;
	
	public PicCodeServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

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

		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//在内存中创建力图象
		BufferedImage 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);
     
       // 创建字体,字体的大小应该根据图片的高度来定。
      Font font=new Font("Times New Roman",Font.PLAIN,18);
       // 设置字体。
       g.setFont(font);
      
       // 画边框。
        g.setColor(Color.BLACK);
        g.drawRect(0,0,width-1,height-1);
       
     // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
       g.setColor(Color.pink);
       for (int i=0;i<160;i++) {
           int x = random.nextInt(width);
           int y = random.nextInt(height);
           int xl = random.nextInt(12);
           int yl = random.nextInt(12);
           g.drawLine(x,y,x+xl,y+yl);
        }
        
        
       // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
       StringBuffer randomCode=new StringBuffer();
       int red=0,green=0,blue=0;
       
      // 随机产生4位数字的验证码。
       for (int i=0;i<4;i++) {
          // 得到随机产生的验证码数字。
          String strRand=String.valueOf(random.nextInt(10));
        
           // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
           red=random.nextInt(110);
           green=random.nextInt(50);
          blue=random.nextInt(50);
           
       // 用随机产生的颜色将验证码绘制到图像中。
           g.setColor(new Color(red,green,blue));
           g.drawString(strRand,13*i+6,16);
         
           // 将产生的四个随机数组合在一起。
          randomCode.append(strRand);
        }
       // 将四位数字的验证码保存到Session中。
       HttpSession session=request.getSession();
       session.setAttribute("randomCode",randomCode.toString());
//       request.setAttribute("randomCode",randomCode.toString());

       
        // 禁止图像缓存。
       response.setHeader("Pragma","no-cache");
       response.setHeader("Cache-Control","no-cache");
       response.setDateHeader("Expires", 0);
       response.setContentType("image/jpeg");
       
       // 将图像输出到Servlet输出流中。
      ServletOutputStream sos=response.getOutputStream();
      ImageIO.write(buffImg, "jpeg",sos);
      System.out.println("==========");
      sos.close();
	}

	public void init() throws ServletException {
		// Put your code here
	}

}


------------------------
二、前台页面登录login.jsp中验证码的输入(原始页面在struts下自动生成)

<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <html:base />
    <title>login.jsp</title>

  </head>
  <body >
	<center>
<h1>欢迎光临!!!!!</h1>
<table border="1"><tr><td>
   	<form action="servlet/DoLoginServlet" method="post">
	用户名:<input type="text" id="username" /><br>
	密 &nbsp;&nbsp;码:<input type="password" id="password"/><br>
	验证码:<input type="text" name="validateCode" id="validateCode" size="5px" />
	<img id="img" src="servlet/PicCodeServlet"/>
<input type="button" value="重新获取验证码" οnclick=""/><br>
	<input type="submit" value="登录" /><input type="reset" id="reset" value="重置"/>
	</form>
</td></tr></table>
</center>
  </body>
</html:html>


----------------------
三、服务器端对验证码的对比确认

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DoLoginServlet extends HttpServlet {

	public DoLoginServlet() {
		super();
	}
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

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

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String code = request.getParameter("validateCode");
		System.out.println("inputCode ="+code);
		System.out.println("sessionCode ="+request.getSession().getAttribute("randomCode"));
		String randomCode = request.getSession().getAttribute("randomCode").toString();
		//把前台输入的验证码与服务器生成的验证码对比
		if(code.equals(randomCode)){
			System.out.println("验证码正确");
		}else{
			System.out.println("验证错误,请重新输入!");
		}
	}
	public void init() throws ServletException {
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在页面中实现hutool工具类的图形验证码,你需要完成以下步骤: 1. 在你的项目中引入hutool工具类库,可以通过Maven或Gradle等构建工具来实现。 2. 在你的页面中添加一个img标签,用于显示验证码图片。 3. 在后端代码中,使用hutool工具类库生成验证码,并将验证码存储到Session中,以便在验证时使用。 4. 将生成的验证码图片以Base64编码的形式返回给前端页面,以便显示。 下面是一个示例代码,演示了如何在页面中实现hutool工具类的图形验证码: ``` <!-- 页面中添加一个img标签用于显示验证码 --> <img id="captchaImg" src="" /> <!-- 在页面中添加一个按钮,用于刷新验证码 --> <button onclick="refreshCaptcha()">刷新验证码</button> <script> // 刷新验证码 function refreshCaptcha() { // 发送Ajax请求获取新的验证码 $.ajax({ url: "/captcha", type: "get", success: function(data) { // 将Base64编码的验证码图片显示在img标签中 $("#captchaImg").attr("src", "data:image/jpeg;base64," + data); } }); } </script> // 后端代码 // 生成验证码 CaptchaUtil.createLineCaptcha(width, height, codeCount, lineCount); // 将验证码存储到Session中 HttpUtil.getSession().setAttribute("captcha", captcha.getCode()); // 将Base64编码的验证码图片返回给前端页面 return Base64.encode(captcha.getImageBytes()); ``` 注意:以上代码仅为示例,实际使用时需要根据自己的项目情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值