zoukankan      html  css  js  c++  java
  • JAVA验证码实现

    后台实现验证码

    用于登录注册验证

    实现思路

    1.前端思路

    a.一个< input> 标签用于填写验证码
    b.一个< img>标签用于展示生成的验证码,src属性值绑定后台生成验证码的方法的访问路径(拼接上系统时间)
    c.点击可切换验证码,登录失败后可以自动刷新
    d.代码实现

    <input id="loginCard" type="text" name="code" lay-verify="code"  placeholder="输入验证码"  autocomplete="off" class="layui-input cardInput" >
    <img id="loginCode" class="layui-input codeInput"  onclick="this.src=this.src+'?'" src="/kaptcha">
    
    
    // 刷新验证码
     var url=$("#loginCode").attr("src")+"?s="+ (new Date()).getTime();
     $("#loginCode").attr("src",url); 
    	                             
    
    

    2. 后台思路

    使用工具类生成一张验证码图片,把图片上字母放进session中储存,用于登录验证

    package com.spb.controller;
    
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.spb.common.KaptchaConfig;
    
    @Controller
    public class KaptchaController {
    	public static final Logger logger = LoggerFactory.getLogger(KaptchaController.class);
    
    	/* 获取验证码图片 */
    	@RequestMapping(path = "/kaptcha", method = RequestMethod.GET)
    	public void getVerificationCode(HttpServletResponse response, HttpServletRequest request) {
    
    		try {
    
    			int width = 200;
    
    			int height = 69;
    
    			BufferedImage verifyImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
    			// 生成对应宽高的初始图片
    
    			String randomText = KaptchaConfig.drawRandomText(width, height, verifyImg);
    
    			// 单独的一个类方法,出于代码复用考虑,进行了封装。
    
    			// 功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符
    
    			request.getSession().setAttribute("verifyCode", randomText);
    
    			response.setContentType("image/png");// 必须设置响应内容类型为图片,否则前台不识别
    
    			OutputStream os = response.getOutputStream(); // 获取文件输出流
    
    			ImageIO.write(verifyImg, "png", os);// 输出图片流
    
    			os.flush();
    
    			os.close();// 关闭流
    
    		} catch (IOException e) {
    
    			this.logger.error(e.getMessage());
    
    			e.printStackTrace();
    
    		}
    	}
    
    }
    
    
    感谢那些夸奖和鼓励,那些不经意的惦记和突如其来的善意,热爱世间浪漫万物,沿途也为晚霞驻足,嘻嘻。
  • 相关阅读:
    10 行 Python 代码,批量压缩图片 500 张,简直太强大了
    听说苏州是互联网的荒漠,真的吗?
    sum() 函数性能堪忧,列表降维有何良方?
    len(x) 击败 x.len(),从内置函数看 Python 的设计思想
    如何给列表降维?sum()函数的妙用
    Shell脚本关于循环的一些总结
    大技霸教你远程执行Linux脚本和命令
    老板对我说,你要是能找出公司里摸鱼的人,我就给你涨薪!于是我写了两个脚本……
    Linux 命令行下搜索工具大盘点,效率提高不止一倍!
    饿了么总监分享:我是如何完成从程序员到管理层的蜕变?
  • 原文地址:https://www.cnblogs.com/linanana/p/14412619.html
Copyright © 2011-2022 走看看