亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringMvc使用GoogleKaptcha生成驗證碼

 更新時間:2017年09月27日 11:28:13   作者:FlyHeLanMan  
這篇文章主要為大家詳細介紹了SpringMvc項目中使用GoogleKaptcha 生成驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言:google captcha 是google生成驗證碼的一個工具類,其原理是將隨機生成字符串保存到session中,同時以圖片的形式返回給頁面,之后前臺頁面提交到后臺進行對比。

1、jar包準備

官方提供的pom應(yīng)該是

<dependency> 
  <groupId>com.google.code.kaptcha</groupId> 
  <artifactId>kaptcha</artifactId> 
  <version>2.3.2</version> 
</dependency>

但是下載不下來,我在阿里的maven倉庫找到的pom如下:

<dependency> 
  <groupId>com.github.penggle</groupId> 
  <artifactId>kaptcha</artifactId> 
  <version>2.3.2</version> 
</dependency>

測試可以正常下載,這里推薦阿里的maven倉庫,下載速度還行,挺穩(wěn)定,附地址:http://maven.aliyun.com/nexus/#welcome

2、spring bean的配置

<!-- google kaptcha的相關(guān)配置-->
  <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> 
    <property name="config"> 
      <bean class="com.google.code.kaptcha.util.Config"> 
        <constructor-arg> 
          <props> 
            <!-- 是否有邊框 可選yes 或者 no --> 
            <prop key="kaptcha.border">yes</prop> 
            <!-- 邊框顏色 -->
            <prop key="kaptcha.border.color">105,179,90</prop> 
            <!-- 驗證碼文本字符顏色 -->
            <prop key="kaptcha.textproducer.font.color">blue</prop> 
            <!-- 驗證碼文本字符大小 -->
            <prop key="kaptcha.textproducer.font.size">45</prop> 
            <!-- 驗證碼圖片的寬度 默認200 -->
            <prop key="kaptcha.image.width">125</prop> 
            <!-- 驗證碼圖片的高度 默認50 -->
            <prop key="kaptcha.image.height">45</prop> 
            <!-- 驗證碼文本字符長度 默認為5 -->
            <prop key="kaptcha.textproducer.char.length">4</prop> 
            <!-- 驗證碼文本字體樣式 默認為new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) -->
            <prop key="kaptcha.textproducer.font.names">宋體,楷體,微軟雅黑</prop> 
          </props> 
        </constructor-arg> 
      </bean> 
    </property> 
  </bean>

3、Controller的兩個方法

package com.ccg.controller;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;

@Controller
@RequestMapping("captcha")
public class CaptchaController {

  @Resource
  private Producer captchaProducer;
  /**
   *       
   *        獲取驗證碼圖片
   * @author     ccg
   * @param     request
   * @param     response
   * @return
   * @throws     IOException
   * Created    2017年1月17日 下午5:07:28
   */
  @RequestMapping("getCaptchaCode")
  public ModelAndView getCaptchaCode(HttpServletRequest request, HttpServletResponse response) throws IOException{
    HttpSession session = request.getSession();
    
    response.setDateHeader("Expires", 0); 
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
    response.addHeader("Cache-Control", "post-check=0, pre-check=0"); 
    response.setHeader("Pragma", "no-cache"); 
    response.setContentType("image/jpeg"); 
    
    //生成驗證碼文本
    String capText = captchaProducer.createText(); 
    session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
    System.out.println("生成驗證碼文本===="+capText);
    //利用生成的字符串構(gòu)建圖片
    BufferedImage bi = captchaProducer.createImage(capText);
    ServletOutputStream out = response.getOutputStream(); 
    ImageIO.write(bi, "jpg", out); 
    
    try { 
      out.flush(); 
    } finally { 
      out.close(); 
    }
    return null;
  }
  
  /**
   *       
   *        前端輸入的驗證碼與生成的對比
   * @author     ccg
   * @param     request
   * @param     response
   * @param     captchaCode
   * Created    2017年1月17日 下午5:34:23
   */
  @RequestMapping("checkCaptchaCode")
  public void checkCaptchaCode(HttpServletRequest request, HttpServletResponse response,@RequestParam("captchaCode") String captchaCode){
    System.out.println("頁面輸入驗證碼===="+captchaCode);
    
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    
    String generateCode =(String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
    String result = "";
    if(generateCode.equals(captchaCode)){
      result = "驗證成功";
    }else{
      result = "輸入錯誤";
    }
    PrintWriter out = null;
    try {
      out = response.getWriter();
    } catch (IOException e) {
      e.printStackTrace();
    }
    out.print(result);
    out.flush();
  }
}

4、前臺頁面代碼

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="${pageContext.request.contextPath}/js/jquery.min.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  生成的驗證碼:<img id="changeCaptcha" src="http://127.0.0.1/captcha/getCaptchaCode.htm"> <a href="javascript:changeCaptcha()" rel="external nofollow" >看不清,換一張</a>
  <br>
  <br>
  請輸入驗證碼:<input id="captchaCode" type="text"> <input type="button" value="提交驗證" onclick="checkCaptcha()">
</body>
<script type="text/javascript">
//獲取驗證碼圖片 
function changeCaptcha(){
  $("#changeCaptcha").attr("src","http://127.0.0.1/captcha/getCaptchaCode.htm");
}
//驗證輸入的驗證碼 
function checkCaptcha(){
  var captchaCode = $("#captchaCode").val();
  $.ajax({
    type:'post',
    async : false,
    url:'http://127.0.0.1/captcha/checkCaptchaCode.htm',
    data:{"captchaCode" : captchaCode},
    success:function(res){
      alert(res);
    }
  });
}
</script>
</html>

需要注意到引用了jquery.min.js

5、運行效果

附Google Captcha 可配置項

kaptcha.border  是否有邊框  默認為true  我們可以自己設(shè)置yes,no 
kaptcha.border.color   邊框顏色   默認為Color.BLACK 
kaptcha.border.thickness  邊框粗細度  默認為1 
kaptcha.producer.impl   驗證碼生成器  默認為DefaultKaptcha 
kaptcha.textproducer.impl   驗證碼文本生成器  默認為DefaultTextCreator 
kaptcha.textproducer.char.string   驗證碼文本字符內(nèi)容范圍  默認為abcde2345678gfynmnpwx 
kaptcha.textproducer.char.length   驗證碼文本字符長度  默認為5 
kaptcha.textproducer.font.names    驗證碼文本字體樣式  默認為new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) 
kaptcha.textproducer.font.size   驗證碼文本字符大小  默認為40 
kaptcha.textproducer.font.color  驗證碼文本字符顏色  默認為Color.BLACK 
kaptcha.textproducer.char.space  驗證碼文本字符間距  默認為2 
kaptcha.noise.impl    驗證碼噪點生成對象  默認為DefaultNoise 
kaptcha.noise.color   驗證碼噪點顏色   默認為Color.BLACK 
kaptcha.obscurificator.impl   驗證碼樣式引擎  默認為WaterRipple 
kaptcha.word.impl   驗證碼文本字符渲染   默認為DefaultWordRenderer 
kaptcha.background.impl   驗證碼背景生成器   默認為DefaultBackground 
kaptcha.background.clear.from   驗證碼背景顏色漸進   默認為Color.LIGHT_GRAY 
kaptcha.background.clear.to   驗證碼背景顏色漸進   默認為Color.WHITE 
kaptcha.image.width   驗證碼圖片寬度  默認為200 
kaptcha.image.height  驗證碼圖片高度  默認為50

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot項目中定制攔截器的方法詳解

    Spring Boot項目中定制攔截器的方法詳解

    這篇文章主要介紹了Spring Boot項目中定制攔截器的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實踐

    Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實踐

    本文主要介紹了Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java生成隨機數(shù)之Random與ThreadLocalRandom性能比較詳解

    Java生成隨機數(shù)之Random與ThreadLocalRandom性能比較詳解

    大家項目中如果有生成隨機數(shù)的需求,我想大多都會選擇使用Random來實現(xiàn),它內(nèi)部使用了CAS來實現(xiàn)。?實際上,JDK1.7之后,提供了另外一個生成隨機數(shù)的類ThreadLocalRandom,那么他們二者之間的性能是怎么樣的呢?本文就來詳細說說
    2022-12-12
  • Springboot項目升級2.2.x升至2.7.x的示例代碼

    Springboot項目升級2.2.x升至2.7.x的示例代碼

    本文主要介紹了Springboot項目升級2.2.x升至2.7.x的示例代碼,會有很多的坑,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Redisson分布式鎖的源碼解讀分享

    Redisson分布式鎖的源碼解讀分享

    Redisson是一個在Redis的基礎(chǔ)上實現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格(In-Memory?Data?Grid)。Redisson有一樣功能是可重入的分布式鎖。本文來討論一下這個功能的特點以及源碼分析
    2022-11-11
  • Hystrix?Turbine聚合監(jiān)控的實現(xiàn)詳解

    Hystrix?Turbine聚合監(jiān)控的實現(xiàn)詳解

    微服務(wù)架構(gòu)下,?個微服務(wù)往往部署多個實例,如果每次只能查看單個實例的監(jiān)控,就需要經(jīng)常切換很不?便,在這樣的場景下,我們可以使??Hystrix?Turbine?進?聚合監(jiān)控,它可以把相關(guān)微服務(wù)的監(jiān)控數(shù)據(jù)聚合在?起,便于查看
    2022-09-09
  • 詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊到Spring中

    詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊到Spring中

    本篇介紹了Spring Boot 使用Java代碼創(chuàng)建Bean并注冊到Spring中,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • SpringBoot之為何推薦使用構(gòu)造器注入

    SpringBoot之為何推薦使用構(gòu)造器注入

    這篇文章主要介紹了SpringBoot之為何推薦使用構(gòu)造器注入問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • @JsonSerialize序列化注解的使用

    @JsonSerialize序列化注解的使用

    這篇文章主要介紹了@JsonSerialize序列化注解的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • springboot2.0和springcloud Finchley版項目搭建(包含eureka,gateWay,F(xiàn)reign,Hystrix)

    springboot2.0和springcloud Finchley版項目搭建(包含eureka,gateWay,F(xiàn)re

    這篇文章主要介紹了springboot2.0和springcloud Finchley版項目搭建(包含eureka,gateWay,F(xiàn)reign,Hystrix),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論