springMVC--动态验证码实现
SpringMVC 实现 -- 动态 验证码
2023-09-27 14:24:55 时间
在网站开发过程中我们一般都会为了防止用户连续提交都会提供验证码的功能,简单来说就是生成一个动态图片,在图片中保存一些校验信息,将校验信息放到session中和用户提交的验证码信息进行对比,如果出现错误则要提示验证码错误。
提供一个简单实现的demo。
- @Controller
- @RequestMapping("/auth")
- public class AuthCodeController {
- private char[] codeSequence = { 'A', '1','B', 'C', '2','D','3', 'E','4', 'F', '5','G','6', 'H', '7','I', '8','J',
- 'K', '9' ,'L', '1','M', '2','N', 'P', '3', 'Q', '4', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z'};
- @RequestMapping("/code")
- public void getCode(HttpServletResponse response,HttpSession session) throws IOException{
- int width = 63;
- int height = 37;
- Random random = new Random();
- //设置response头信息
- //禁止缓存
- response.setHeader("Pragma", "No-cache");
- response.setHeader("Cache-Control", "no-cache");
- response.setDateHeader("Expires", 0);
- //生成缓冲区image类
- BufferedImage image = new BufferedImage(width, height, 1);
- //产生image类的Graphics用于绘制操作
- Graphics g = image.getGraphics();
- //Graphics类的样式
- g.setColor(this.getColor(200, 250));
- g.setFont(new Font("Times New Roman",0,28));
- g.fillRect(0, 0, width, height);
- //绘制干扰线
- for(int i=0;i<40;i++){
- g.setColor(this.getColor(130, 200));
- int x = random.nextInt(width);
- int y = random.nextInt(height);
- int x1 = random.nextInt(12);
- int y1 = random.nextInt(12);
- g.drawLine(x, y, x + x1, y + y1);
- }
- //绘制字符
- String strCode = "";
- for(int i=0;i<4;i++){
- String rand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
- strCode = strCode + rand;
- g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
- g.drawString(rand, 13*i+6, 28);
- }
- //将字符保存到session中用于前端的验证
- session.setAttribute("authCode", strCode.toLowerCase());
- g.dispose();
- ImageIO.write(image, "JPEG", response.getOutputStream());
- response.getOutputStream().flush();
- }
- public Color getColor(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);
- }
- }
- <label><img type="image" src="/auth/code" id="codeImage" style="cursor:pointer;"/></label>
相关文章
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
- SpringMVC+Mybatis实战案例
- idea实现spring + springMVC + mybatis 整合(2)
- Idea简单实现springMVC,使用maven项目(详解)
- SpringMVC 之类型转换Converter详解转载
- springmvc配置的国际化资源文件显示为???key???的错误原因
- Spring获取springmvc的controller bean
- SpringMVC 返回 html 视图页面,SpringMVC与Servlet,Servlet重定向与转发
- springmvc+redis实现简单消息队列
- 基于Java( Spring+SpringMVC+JDBC)+MySQL实现(Web)家电售后服务系统【100010064】
- SpringMVC中采用简洁的配置实现文件上传
- Quartz+SpringMVC实现web定时管理任务
- Springmvc 应用Mongodb分页实现
- Java面试之SpringMVC总结以及在面试中的一些问题.
- springMVC配置文件学习
- 【springMVC】转发与重定向
- spring+ springmvc + websocket+sockjs 404/200
- SpringMVC的请求和响应
- springMVC和springBoot区别