ssm框架下java实现简单验证码

java实现简单验证码案例

工具类代码

public class NubmerToJpgUtil {
	public static String NumberToJpgUtil(OutputStream outputStream) throws IOException{
		Random rd = new Random();
		BufferedImage img = new BufferedImage(140, 50, BufferedImage.TYPE_INT_BGR);
		Graphics g = img.getGraphics();
		g.setFont(new Font("宋体", Font.BOLD, 60));
		String number = String.valueOf(rd.nextInt(10000));
 		g.drawString(number, 10, 50);
		ImageIO.write(img, "jpg", outputStream);
		return number;
	}
}

工具类的实现主要思想是将一串随机数用java的graphics对象画在图片上面,然后将写出到方法传入的输入流中实现输出,最后将验证码的数值作为返回值返回。如果需要加强验证码的强度,可以在数字或字母的绘画上进行旋转和平移,或者添加一些干扰线。

后端代码

@RequestMapping(value = "changevarcode")//更换验证码
	public void changevarcode(HttpSession session,HttpServletResponse res) throws IOException {
		//写出到response的输出流中
		String varcodenumber = NubmerToJpgUtil.NumberToJpgUtil(res.getOutputStream());
		session.setAttribute("varcodenumber",varcodenumber);
	}

后端主要流程是把servlet的response的输出流调出作为输出流调用工具类的方法,并把返回的验证码的值存入到session中方便验证方法调用。

前端代码

<img onclick="changevarcode()" id="varcodeimg" alt="验证码" src="changevarcode.do">

前端的代码可以直接将生成验证码的servlet路径作为src值进行展示。

js代码

function changevarcode(){
		var src = "changevarcode.do?t="+new Date().getTime();
		$("#varcodeimg").attr("src",src);
	}

js作用是每次点击验证码时更换验证码,如果将原有的图片src值进行更改,浏览器将会把更改后的图片立即展示出来,这是浏览器的特性。这里主要是获取当前时间作为不同的src参数传给相同后端,每次浏览器访问新的映射就会产生新的不同的验证码,并更改验证码的正确值。

SSM框架中,实现验证码可以通过以下步骤: 1. 在Spring MVC的Controller中,定义一个方法用于生成验证码图片,并将生成的验证码字符串存储到session中。 ```java @RequestMapping("/getVerifyCodeImage") public void getVerifyCodeImage(HttpServletRequest request, HttpServletResponse response) throws Exception { // 生成验证码 String verifyCode = VerifyCodeUtils.generateVerifyCode(4); // 将验证码存入session request.getSession().setAttribute("verifyCode", verifyCode); // 生成验证码图片 BufferedImage image = VerifyCodeUtils.generateImage(verifyCode, 100, 40); // 将验证码图片输出给客户端 ImageIO.write(image, "JPEG", response.getOutputStream()); } ``` 2. 在前端页面中,使用AJAX请求获取验证码图片,并将图片显示在页面上。 ```javascript $.ajax({ url: "/getVerifyCodeImage", type: "GET", success: function(data) { $("#verifyCodeImage").attr("src", "data:image/jpeg;base64," + data); } }); ``` 3. 在后端Controller中,验证用户输入的验证码是否正确。 ```java @RequestMapping("/login") public String login(HttpServletRequest request, HttpServletResponse response) throws Exception { String username = request.getParameter("username"); String password = request.getParameter("password"); String verifyCode = request.getParameter("verifyCode"); String sessionVerifyCode = (String) request.getSession().getAttribute("verifyCode"); if (!verifyCode.equalsIgnoreCase(sessionVerifyCode)) { request.setAttribute("errorMsg", "验证码错误"); return "login"; } // 验证用户名和密码 // ... } ``` 通过以上步骤,就可以在SSM框架实现验证码功能。需要注意的是,生成验证码的工具类VerifyCodeUtils需要自行实现或引入第三方库。在实现过程中,还要注意验证码的安全性,避免机器自动识别验证码的攻击。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值