springmvc下实现登录验证码功能示例

总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对。

点击验证码图片时,通过jquery重新请求后台生成验证码图片方法,更换图片。

首先在后端controller里,有这样一个方法:

路径为http://localhost:8888/RiXiang_blog/login/captcha.form,访问这个路径便可以通过response写入图片。

  @RequestMapping(value = "/captcha", method = RequestMethod.GET)
  @ResponseBody
  public void captcha(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    CaptchaUtil.outputCaptcha(request, response);
  }

CaptchaUtil是一个工具类,封装了验证码图片生成,和存储session功能。

代码如下:

package com.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

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

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
* @ClassName: CaptchaUtil
* @Description: 关于验证码的工具类
* @author 无名
* @date 2016-5-7 上午8:33:08
* @version 1.0
 */
public final class CaptchaUtil
{
  private CaptchaUtil(){}

  /*
   * 随机字符字典
   */
  private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
    '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
    'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

  /*
   * 随机数
   */
  private static Random random = new Random();

  /*
   * 获取6位随机数
   */
  private static String getRandomString()
  {
    StringBuffer buffer = new StringBuffer();
    for(int i = 0; i < 6; i++)
    {
      buffer.append(CHARS[random.nextInt(CHARS.length)]);
    }
    return buffer.toString();
  }

  /*
   * 获取随机数颜色
   */
  private static Color getRandomColor()
  {
    return new Color(random.nextInt(255),random.nextInt(255),
        random.nextInt(255));
  }

  /*
   * 返回某颜色的反色
   */
  private static Color getReverseColor(Color c)
  {
    return new Color(255 - c.getRed(), 255 - c.getGreen(),
        255 - c.getBlue());
  }

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

    response.setContentType("image/jpeg");

    String randomString = getRandomString();
    request.getSession(true).setAttribute("randomString", randomString);

    int width = 100;
    int height = 30;

    Color color = getRandomColor();
    Color reverse = getReverseColor(color);

    BufferedImage bi = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
    g.setColor(color);
    g.fillRect(0, 0, width, height);
    g.setColor(reverse);
    g.drawString(randomString, 18, 20);
    for (int i = 0, n = random.nextInt(100); i < n; i++)
    {
      g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
    }

    // 转成JPEG格式
    ServletOutputStream out = response.getOutputStream();
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(bi);
    out.flush();
  }
}

前端获取验证码图片,要这样写:

……

<tr>
  <th>captcha</th>
  <td>
       <input type="text" id="captcha" name="captcha" class="text" maxlength="10" />
       <img id="captchaImage" src="captcha.form"/>
   </td>
 </tr>

img的src里写入路径,页面加载时就会访问http://localhost:8888/RiXiang_blog/login/captcha.form获取图片。

表单的提交和登录信息验证就不具体讲了。

点击更换验证码的js代码如下:

// 更换验证码
$('#captchaImage').click(function()
{
  $('#captchaImage').attr("src", "captcha.form?timestamp=" + (new Date()).valueOf());
}); 

可以看到后面加入时间戳作为参数,timestamp=" + (new Date()).valueOf()。加入这个参数就可以实现重新访问后台方法。否则是无法刷新图像的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • spring mvc 使用kaptcha配置生成验证码实例

    使用Kaptcha 生成验证码十分简单并且参数可以进行自定义,以下简单记录下使用步骤. 1.在pom.xml中添加maven依赖: <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version> <classifier>jdk15</classif

  • SpringMvc使用GoogleKaptcha生成验证码

    前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 官方提供的pom应该是 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2<

  • Spring MVC 中 短信验证码功能的实现方法

    在外部网站中短信的验证很有必要,比如在实现注册.验证用户信息等的情况下.在SpringMVC中的实现如下: 短信接口 短信接口,有些企业会购买的有移动的短信平台接口.如果是个人或者是小企业可以使用一些云服务的.比如百度的API Store上面的. 我使用的是:http://apistore.baidu.com/apiworks/servicedetail/1018.html 当然短信接口肯定都是要付费的,而且是基于模板的,具体的使用说明可以看这个网址里面的使用说明. 前端界面 前端的界面,可能如

  • Spring MVC中使用Google kaptcha验证码的方法详解

    前言 众所周知验证码是抵抗批量操作和恶意登录最有效的方式之一,我们在每天或许都会遇到,验证码从产生到现在已经衍生出了很多分支.方式.google kaptcha 是一个非常实用的验证码生成类库. 通过灵活的配置生成各种样式的验证码,并将生成的验证码字符串放到 HttpSession 中,方便获取进行比较. 本文描述在 spring mvc 下快速的将 google kaptcha 集成到项目中(单独使用的话在 web.xml 中配置 KaptchaServlet).下面话不多说了,来一起看看详细

  • SpringMVC下获取验证码实例详解

    SpringMVC下获取验证码实例详解 前言: 1.用户一开始登录的时候, 不建议出现验证码, 这一点在很多网站上已经体现的很好了, 只有当用户连续输错三次或者以上才会要求用户输入验证码. 2.记录用户输错次数最好不要使用 session 来记录, 因为 session 是跟客户端浏览器会话有关的, 如果用重启浏览器或者换新的浏览器再来登录或者试错, 就是新的回话了, 原来记录的错误次数就失效了. 建议此处采用缓存机制来实现, 简单处理就是采用 Map<用户登录id, 错误次数> 来实现, 如

  • springmvc下实现登录验证码功能示例

    总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对. 点击验证码图片时,通过jquery重新请求后台生成验证码图片方法,更换图片. 首先在后端controller里,有这样一个方法: 路径为http://localhost:8888/RiXiang_blog/login/captcha.form,访问这个路径便可以通过response写入图片. @RequestMa

  • Google Kaptcha 框架实现登录验证码功能(SSM 和 SpringBoot)

    一.效果图: 二.导入 jar 包 1.由于这是大神写好封装起来的一个框架,所有我们使用前得先下载相关的 jar 包 第一种:maven <!-- 验证码 --> <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --> <dependency>     <groupId>com.github.penggle</groupId>     <artifactI

  • SSM 实现登录验证码功能(附源码)

    如果想用框架来实现验证码,可以看我的另外一篇: Kaptcha 框架的使用很简单的.新手必备. https://www.jb51.net/article/152260.htm 一.效果图 二.实现代码 第一步:先建一个 RandomValidateCode.java 作为工具类.把下面的代码直接复制粘贴即可. package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; impo

  • SSM框架下实现登录注册的示例代码

    基本配置:jdk1.8   tomcat 8  MyEclipse 先打好地基: spring配置文件 application.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

  • Idea中maven项目实现登录验证码功能

    1.配置maven环境变量,将maven安装的bin⽬录添加到path路径中(此电脑->属性->高级系统设置->环境变量->) 路径为maven安装目录 2.找到ValidateCode.jar包的本地路径 3.制作Jar包 原jar包地址:链接: https://pan.baidu.com/s/1QpqiZaF_ZYhW1Qn3ifn2eg 提取码: uc47 无法直接使用,需要命令行制作,命令如下: mvn install:install-file -DgroupId=it.s

  • java实现登录验证码功能

    本文实例为大家分享了java实现登录验证码功能的具体代码,供大家参考,具体内容如下 登录验证码 登录验证是大多数登录系统都会用到的一个功能,它的验证方式也是有很多种,例如登录验证码,登录验证条及拼图拖动块等,这里讲讲输入登录验证码的方式来实现的例子.首先,kaptcha这是一个开源的验证码实现库,利用这个库可以非常方便的实现验证码功能. 1.添加依赖 在pom文件下添加kaptcha依赖包 <!-- https://mvnrepository.com/artifact/com.github.ax

  • PHP编写登录验证码功能 附调用方法

    本文实例为大家分享了一个PHP写的登录验证码功能,供大家参考,具体内容如下 ShowKey.php <?php session_start(); //设置COOKIE或Session function esetcookie($name,$str,$life=0){ //本函数将字符串 str 全部变小写字符串使验证码输入不区分大小写----在提交表单进行session比较同样需要次函数转化 $_SESSION[$name]=strtolower($str); } //获取随机字符 此函数区分字符

  • Android 获取随机验证码功能示例

    验证码功能在各大网站都能用到,下面小编通过实例代码给大家分享Android 获取随机验证码功能,具体代码如下所示: package cn.hk.image; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; impo

  • Django中使用pillow实现登录验证码功能(带刷新验证码功能)

    首先在项目里建立common目录,编写验证码的函数 verification_code.py import random from PIL import Image, ImageFont, ImageDraw def get_code(): mode = 'RGB' bg_width = 180 #这个是验证码那个框框的宽度 bg_height = 30 #这个是验证码那个框框的高度 bg_size = (bg_width, bg_height) bg_color = (255, 255, 25

  • Spring Boot实现登录验证码功能的案例详解

    目录 验证码的作用 案例要求 前端页面准备 准备login.html页面 随机验证码工具类 后端控制器 验证码的作用 验证码的作用:可以有效防止其他人对某一个特定的注册用户用特定的程序暴力破解方式进行不断的登录尝试我们其实很经常看到,登录一些网站其实是需要验证码的,比如牛客,QQ等.使用验证码是现在很多网站通行的一种方式,这个问题是由计算机生成并且评判的,但是必须只有人类才能解答,因为计算机无法解答验证码的问题,所以回答出问题的用户就可以被认为是人类.验证码一般用来防止批量注册. 案例要求 验证

随机推荐