设为首页 加入收藏

TOP

Java 实现验证码功能(一)
2018-05-21 15:49:37 】 浏览:185
Tags:Java 实现 验证 功能

所需文件以及技术:


  · SecurityUtil.java  (后面我会复制给大家)
  · 图像处理技术
  · 向客户端输出io流


 一,实现的原理,当视图页面加载的时候通过<img >元素的src属性去请求获得验证码图片,请求控制层验证码生成类随机生成4个字母或数字(验证码长度可以修改),将生成的验证码存储在session对象里面,最后通过ImageIO响应给客户端。


二,实现的步骤:


1,html:


<script type="text/java script">
      function reloadCode() {         
 
 document.getElementById("imgSignCode").src="../signcode/signcode/get.do?r=" + new Date().getTime();    //这里为什么会加一个时间戳参数呢?  浏览器带有缓存功能
//当一个src中的URL请求一次后,再次请求浏览器就不会再去请求获得新数据,而是直接用
//上次请求返回的数据
    }
      </script>
      <body>
        <img id="imgSignCode" src="../signcode/signcode/get.do" onclick="reloadCode()" title="重新获取" style="cursor:pointer;"/> 
      </body>


2,Controller层方法:


/**
    * ajax获取验证码
    */
    @ResponseBody
    @RequestMapping(value = "/getSecurityCode.ajax", produces = {"application/json;charset=UTF-8"})
    public void getSecurityCode(HttpServletResponse response, HttpServletRequest request){
        // 通知浏览器不要缓存 
                response.setHeader("Expires", "-1"); 
                response.setHeader("Cache-Control", "no-cache"); 
                response.setHeader("Pragma", "-1"); 
                SecurityUtil util = SecurityUtil.Instance(); 
                // 将验证码输入到session中,用来验证 
                String code = util.getString(); 
                request.getSession().setAttribute("code", code); 
                // 输出打web页面 
                try {
            ImageIO.write(util.getImage(), "jpg", response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        }


三,SecurityUtil代码:


package cc.royao.utils;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;


public class SecurityUtil {
   
    private BufferedImage image;// 图像 
    private String str;// 验证码 
    private static char code[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray(); 
    public static final String SESSION_CODE_NAME="code"; 
    private SecurityUtil() { 
        init();// 初始化属性 
    } 


    /*
    * 取得RandomNumUtil实例
    */ 
    public static SecurityUtil Instance() { 
&nbs

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java实现链表的常见操作算法 下一篇Linux kernel workqueue机制分析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目