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

作者:csdn_小东 时间:2023-01-14 09:21:38 

一、效果图:

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

二、导入 jar 包

1.由于这是大神写好封装起来的一个框架,所有我们使用前得先下载相关的 jar 包

第一种:maven


<!-- 验证码 -->
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

第二种:lib

打开链接:https://mvnrepository.com/artifact/com.github.penggle/kaptcha

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

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

三、SSM 通过 Kaptcha 简单实现验证码

直接在 web.xml 里面直接配置

验证码的一些样式都是通过配置来实现的,下面是我自己使用的一个demo,如果需要更改字体颜色还有字体大小什么的等,可以自己根据注释来修改。不然直接复制粘贴也行。由于配置比较简单,不作过多解释,直接上代码。


<!-- 验证码相关属性的配置 -->
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<!-- 定义 Kaptcha 的样式 -->
<!-- 是否有边框 -->
<init-param>
 <param-name>kaptcha.border</param-name>
 <param-value>no</param-value>
</init-param>
<!-- 字体颜色 -->
<init-param>
 <param-name>kaptcha.textproducer.font.color</param-name>
 <param-value>red</param-value>
</init-param>
<!-- 图片宽度 -->
<init-param>
 <param-name>kaptcha.image.width</param-name>
 <param-value>135</param-value>
</init-param>
<!-- 图片高度 -->
<init-param>
 <param-name>kaptcha.image.height</param-name>
 <param-value>50</param-value>
</init-param>
<!-- 使用哪些字符生成验证码 -->
<init-param>
 <param-name>kaptcha.textproducer.char.string</param-name>
 <param-value>ACDEFHKPRSTWX345975</param-value>
</init-param>
<!-- 字体大小 -->
<init-param>
 <param-name>kaptcha.textproducer.font.size</param-name>
 <param-value>43</param-value>
</init-param>
<!-- 干扰线的颜色 -->
<init-param>
 <param-name>kaptcha.noise.color</param-name>
 <param-value>black</param-value>
</init-param>
<!-- 字符个数 -->
<init-param>
 <param-name>kaptcha.textproducer.char.length</param-name>
 <param-value>4</param-value>
</init-param>
<!-- 字体 -->
<init-param>
 <param-name>kaptcha.textproducer.font.names</param-name>
 <param-value>Arial</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Kaptcha</servlet-name>
<!-- 外部访问路径 -->
<url-pattern>/Kaptcha</url-pattern>
</servlet-mapping>

3.前端验证码的显示实现


div class="item-inner">
<div class="item-title label">验证码</div>
<input type="text" id="j_captcha" placeholder="验证码">
<div class="item-input">
 <img id="captcha_img" alt="点击更换" title="点击更换"
   onclick="changeVerifyCode(this)" src="../Kaptcha"/>
</div>
</div>
function changeVerifyCode(img){
img.src="../Kaptcha?" + Math.floor(Math.random()*100);
}

解释:

验证码图片的链接 src 中的 "../Kaptcha",这里的“Kaptcha”是要与刚刚 web.xml 中的 url-pattern 配置的值一样的,并非随便写的。

4.后端进行验证码的输入验证

实现思路:我是把验证码的验证单独写成一个静态类,然后在控制层里面直接调用就行。

验证码静态类:


public class CodeUtil {
public static boolean checkVerifyCode(HttpServletRequest request){
 String verifyCodeExpected = (String)request.getSession().getAttribute(
   com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
 //这里相当于 request.getParameter("verifyCodeActual");
 String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
 if(verifyCodeActual == null || verifyCodeActual.equals(verifyCodeExpected)){
  return false;
 }
 return true;
}}

控制层调用代码:


if(!CodeUtil.checkVerifyCode(request)){
modelMap.put("success", false);
modelMap.put("errMsg", "输入了错误的验证码");
return modelMap;
}
modelMap.put("success", false);
modelMap.put("errMsg", "输入了错误的验证码");
return modelMap;
}

if 里面验证码不通过(错误)的时候,我自己做的一些处理,可以根据自己的实际情况进行修改。

SSM 环境下 Kaptcha 的使用就介绍完了。

四、SpringBoot 通过 Kaptcha 简单实现验证码

思路:将 xml 的形势转化成代码实现。


package com.example.demo.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class KaptchaController {
@Bean(name="captchaProducer")
public DefaultKaptcha getKaptchaBean(){
 DefaultKaptcha defaultKaptcha=new DefaultKaptcha();
 Properties properties=new Properties();
 properties.setProperty("kaptcha.border", "yes");
 properties.setProperty("kaptcha.border.color", "105,179,90");
 properties.setProperty("kaptcha.textproducer.font.color", "blue");
 properties.setProperty("kaptcha.image.width", "125");
 properties.setProperty("kaptcha.image.height", "45");
 properties.setProperty("kaptcha.session.key", "code");
 properties.setProperty("kaptcha.textproducer.char.length", "4");
 properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
 Config config=new Config(properties);
 defaultKaptcha.setConfig(config);
 return defaultKaptcha;
}
}

编写一个 controller 类。


package com.example.demo.controller;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
@Controller
public class ChaController {
@Autowired
private Producer captchaProducer;
@GetMapping("/getKaptchaImage")
public void getKaptchaImage(HttpServletResponse response,HttpSession session) throws Exception {
 response.setDateHeader("Expires", 0);
 // Set standard HTTP/1.1 no-cache headers.
 response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
 // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
 response.addHeader("Cache-Control", "post-check=0, pre-check=0");
 // Set standard HTTP/1.0 no-cache header.
 response.setHeader("Pragma", "no-cache");
 // return a jpeg
 response.setContentType("image/jpeg");
 // create the text for the image
 String capText = captchaProducer.createText();
 // store the text in the session
 //request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
 //将验证码存到session
 session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
 // create the image with the text
 BufferedImage bi = captchaProducer.createImage(capText);
 ServletOutputStream out = response.getOutputStream();
 // write the data out
 ImageIO.write(bi, "jpg", out);
 try {
  out.flush();
 } finally {
  out.close();
 }
}
}

前端代码:


<img id="captcha_img" alt="点击更换" title="点击更换"
   onclick="changeVerifyCode(this)" src="../getKaptchaImage"/>

至于点击切换验证码还有后台如何接受验证,跟前面 SSM 的使用方法一样,这里就不再赘述。

我们可以直接启动 springboot 的项目,在浏览器上直接访问获取验证码的接口。

http://localhost:8080/getKaptchaImage

就能在浏览器上看到验证码的图片了,说明配置是成功的。

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

五、Kaptcha 属性表

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

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

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

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

总结

以上所述是小编给大家介绍的Google Kaptcha 框架实现登录验证码功能(SSM 和 SpringBoot)网站的支持!

来源:https://blog.csdn.net/weidong_y/article/details/81005658

标签:Google,Kaptcha,ssm,spring,boot,登录,验证码
0
投稿

猜你喜欢

  • Spring Security角色继承分析

    2022-02-03 03:39:12
  • 分享两种实现Winform程序的多语言支持的多种解决方案

    2023-10-17 21:24:17
  • java.math包下计算浮点数和整数的类的实例

    2023-02-06 16:19:39
  • java spring mvc处理器映射器介绍

    2021-11-22 01:01:35
  • 如何利用IDEA搭建SpringBoot项目整合mybatis实现简单的登录功能

    2022-01-15 06:14:59
  • Android 字符串中某个字段可点击和设置颜色的方法

    2023-07-24 00:16:53
  • Android编程实现给Button添加图片和文字的方法

    2021-11-27 21:30:20
  • Java中ArrayList的工作原理详解

    2021-12-18 08:01:45
  • IDEA 单元测试报错:Class not found:xxxx springboot的解决

    2022-05-11 01:11:02
  • 详解SpringBoot中添加@ResponseBody注解会发生什么

    2023-07-02 22:08:13
  • 浅谈C#指针问题

    2022-07-19 17:06:00
  • Android使用ViewPager加载图片和轮播视频

    2023-10-26 08:20:04
  • C#读取或设置ScrollLock状态的方法

    2023-03-14 21:41:24
  • 基于Mybatis-Plus的CRUD的实现

    2023-09-10 14:38:45
  • 使用RecyclerView实现水平列表

    2022-04-25 19:27:13
  • 深入理解c# checked unchecked 关键字

    2021-11-29 01:25:09
  • Android播放音乐案例分享

    2023-08-27 14:41:31
  • C语言简明讲解变量的属性

    2021-06-23 17:45:28
  • Android实现圆形渐变加载进度条

    2021-07-17 18:38:06
  • C#生成EMF矢量图形文件示例详解

    2022-10-30 02:12:56
  • asp之家 软件编程 m.aspxhome.com