我是靠谱客的博主 唠叨钢笔,最近开发中收集的这篇文章主要介绍Java web验证码——kaptcha的三种配置方式Java web验证码——kaptcha的使用(1)Java web验证码——kaptcha的使用(2)Java web验证码——kaptcha的使用(3),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java web验证码——kaptcha的3种使用方式

Java web验证码——kaptcha的3种使用方式

  • Java web验证码——kaptcha的使用(1)
    • ——通过XML配置文件配置
    • 一. 配置kaptcha的jar包
        • pom.xml配置:
        • commons-fileupload配置:
    • 二.kaptcha样式配置
        • web.xml:配置kaptcha的servlet及部分样式
          • kaptcha详细参数:
    • 三.后端验证
        • 前端页面:
        • 前端部分js代码:
    • 四.注意(记得配置文件解析)
  • Java web验证码——kaptcha的使用(2)
    • ——创建kaptcha 的配置文件对应实体类
    • 一. 配置kaptcha的jar包
    • 二.kaptcha样式配置
  • Java web验证码——kaptcha的使用(3)
    • ——创建kaptcha 的配置文件对应实体类
    • 一. 配置kaptcha的jar包
    • 二.kaptcha样式配置
        • application.yml/application.properties中文件配置:
        • 配置类 MvcConfiguration.java
        • Controller层验证:

代码资源可从本博客资源中下载,地址:https://download.csdn.net/download/weixin_43666414/14170054
通过调用kaptcha依赖使用验证码本人总结有3中方式:
1:直接通过XML配置文件使用:使用.xml的配置方式配置生成kaptcha的bean对象,在启动类上@ImportResource这个xml文件
2:创建实体Bean对象:把kaptcha作为工程的一个类,加上@component注解在返回kaptcha的方法中加上@Bean注解,再在controller中注入其对象。
3:使用属性文件*.yml配置相关验证码属性
下面介绍第一种方法:

Java web验证码——kaptcha的使用(1)

——通过XML配置文件配置

方式一借鉴自其他作者:[创建原作者链接](https://www.cnblogs.com/lyq-biu/p/10853830.html)

通过使用.xml的配置方式配置生成kaptcha的bean对象,在启动类上@ImportResource这个xml文件;在controller中注入其对象并使用

一. 配置kaptcha的jar包

在这里插入图片描述

pom.xml配置:

<-- 目前只有2.3.2版本-->    
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

依赖jar包 (commons-fileupload):支持多文件上传![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/ef12dc7c3fb89ff999daaf2ece08cd39.png#pic_center
在这里插入图片描述

commons-fileupload配置:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <!-- 上传文件 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

二.kaptcha样式配置

web.xml:配置kaptcha的servlet及部分样式

<servlet>
        <servlet-name>Kaptcha</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <!-- 定义验证码样式 -->
        <!-- 是否有边框 -->
        <init-param>
            <param-name>kaptcha.border</param-name>
            <!-- 没有边框 no -->
            <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.textProducer.char.string</param-name>
            <param-value>ACDEFHKPRSTWX345679</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.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>Aria</param-value>
        </init-param>    
    </servlet>
    <servlet-mapping>
    <servlet-name>Kaptcha</servlet-name>
    <url-pattern>/Kaptcha</url-pattern>
    </servlet-mapping>
kaptcha详细参数:

在这里插入图片描述

三.后端验证

从前端接收验证码并验证是否正确:

import javax.servlet.http.HttpServletRequest;

public class CodeUtil {
    public static boolean checkVerifyCode(HttpServletRequest request) {
        String verifyCodeExpected = (String) request.getSession()
                .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
        String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
        if (verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)) {
            return false;

        }
        return true;
    }
}

前端页面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>SUI Mobile Demo</title>
<meta name="description"
      content="MSUI: Build mobile apps with simple HTML, CSS, and JS components."/>
<meta name="author" content="阿里巴巴国际UED前端"/>
<meta name="viewport" content="initial-scale=1, maximum-scale=1"/>
<link rel="shortcut icon" href="/favicon.ico"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<!-- Google Web Fonts -->
<link rel="stylesheet"
      href="//g.alicdn.com/msui/sm/0.6.2/css/sm.min.css"/>
<link rel="stylesheet"
      href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"/>
<link rel="apple-touch-icon-precomposed"
      href="/assets/img/apple-touch-icon-114x114.png"/>
</head>
<body>
    <h2>HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH</h2>
    <div class="item-content">
        <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>
    </div>

    <script type='text/javascript'
            src='//g.alicdn.com/sj/lib/zepto/zepto.min.js' charset='utf-8'></script>
    <script type='text/javascript'
            src='//g.alicdn.com/msui/sm/0.6.2/js/sm.min.js' charset='utf-8'></script>
    <script type='text/javascript'
            src='//g.alicdn.com/msui/sm/0.6.2/js/sm-extend.min.js' charset='utf-8'></script>
    <script type="text/javascript">
        function changeVerifyCode(img) {
            img.src = "../Kaptcha?" + Math.floor(Math.random() * 100);
        }

        $('#submit').click(function(){
            var verifyCodeActual = $('#j-kaptcha').val();
            if(!verifyCodeActual) {
                $.toast('请输入验证码');
                return;
            }
            formData.append('verifyCodeActual', verifyCodeActual);
            $.ajax({
                url: registerShopUrl,
                type: 'POST',
                data: formData,
                contentType: false,
                processData: false,
                cache: false,
                success: function(data) {
                    if(data.success) {
                        $.toast('提交成功!');
                    }else {
                        $.toast('提交失败!' + data.errMsg);
                    }
                    $('kaptcha-img').click();
                }
            });
        });
    </script>
</body>
</html>

前端部分js代码:

.....
<!-- 获取输入框验证码-->
var verifyCodeActual=$('#j_captcha').val();
            if(!verifyCodeActual){
                $.toast("请输出验证码");
                return;
            }
<!--通过ajax异步提交-->
            formData.append('verifyCodeActual',verifyCodeActual);
            $ajax({
                url:registerShopUrl,
                type:'POST',
                data:formData,
                contentType:false,
                processData:false,
                cacche:false,
                success:function(data){
                     if(data.success){
                         $.toast("提交成功");
                     }
                     else{
                         $.toast("提交失败:"+data.errMsg);
                     }
                     $('#captcha_img').click();
                }
            })

四.注意(记得配置文件解析)

#### 文件解析器配置(不然获取到的验证码为空):

<!-- 文件上传解析器 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默认编码 -->
        <property name="defaultEncoding" value="utf-8"></property>
        <!-- 上传文件的最大 尺寸(单位是字节)-->
        <!-- 1024*1024*20=20971520 -->
        <property name="maxUploadSize" value="20971520"></property>
        <!-- 允许写在内存中的最大值 -->
        <property name="maxInMemorySize" value="20971520"></property>

    </bean>

Java web验证码——kaptcha的使用(2)

——创建kaptcha 的配置文件对应实体类

	把kaptcha作为工程的一个类,加上@component注解在返回kaptcha的方法中加上@Bean注解,再在controller中注入其对象。

一. 配置kaptcha的jar包

	区别主要在第二步,其余步骤基本同上方式一相同,在此省略。

二.kaptcha样式配置

package com.cun.conf;

import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;

@Component
public class KaptchaConfig {
	@Bean
	public DefaultKaptcha getDefaultKaptcha() {
		com.google.code.kaptcha.impl.DefaultKaptcha defaultKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha();
		Properties properties = new Properties();
		// 图片边框
		properties.setProperty("kaptcha.border", "yes");
		// 边框颜色
		properties.setProperty("kaptcha.border.color", "105,180,90");
		// 字体颜色
		properties.setProperty("kaptcha.textproducer.font.color", "red");
		// 图片宽
		properties.setProperty("kaptcha.image.width", "135");
		// 图片高
		properties.setProperty("kaptcha.image.height", "50");
		// 字体大小
		properties.setProperty("kaptcha.textproducer.font.size", "45");
		// session key
		properties.setProperty("kaptcha.session.key", "code");
		// 验证码长度
		properties.setProperty("kaptcha.textproducer.char.length", "4");
		// 字体
		properties.setProperty("kaptcha.textproducer.font.names", "Aria,楷体,微软雅黑");
		Config config = new Config(properties);
		defaultKaptcha.setConfig(config);

		return defaultKaptcha;
	}
}

Java web验证码——kaptcha的使用(3)

——创建kaptcha 的配置文件对应实体类

一. 配置kaptcha的jar包

	区别主要在第二步,其余步骤基本同上方式一相同,在此省略。在这里插入代码片

二.kaptcha样式配置

application.yml/application.properties中文件配置:

server.port=8080
#以 http://localhost:8080/o2o/ 访问
server.context-path=/
#spring.thymeleaf.prefix=classpath:/templates/
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
#Kaptcha的配置
kaptcha.border=1
kaptcha.textproducer.font.color=red
kaptcha.image.width=135
kaptcha.textproducer.char.string=ACDEFHKPRSTWX345679
kaptcha.image.height=50
kaptcha.textproducer.font.size=43
kaptcha.noise.color=black
kaptcha.textproducer.char.length=4
kaptcha.textproducer.font.names=Arial

配置类 MvcConfiguration.java

package com.example.kaptcha1.config;

import com.google.code.kaptcha.servlet.KaptchaServlet;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.servlet.ServletException;

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware {
    // 获取Spring容器
    private ApplicationContext applicationContext;

    @Value("${kaptcha.border}")
    private String border;

    @Value("${kaptcha.textproducer.font.color}")
    private String fcolor;

    @Value("${kaptcha.image.width}")
    private String width;

    @Value("${kaptcha.textproducer.char.string}")
    private String cString;

    @Value("${kaptcha.image.height}")
    private String height;

    @Value("${kaptcha.textproducer.font.size}")
    private String fsize;

    @Value("${kaptcha.noise.color}")
    private String nColor;

    @Value("${kaptcha.textproducer.char.length}")
    private String clength;

    @Value("${kaptcha.textproducer.font.names}")
    private String fnames;

    /**
     * 由于web.xml不生效了,需要在这里配置Kaptcha验证码Servlet
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean() throws ServletException {
        ServletRegistrationBean servlet = new ServletRegistrationBean(new KaptchaServlet(), "/Kaptcha");
        servlet.addInitParameter("kaptcha.border", border);// 无边框
        servlet.addInitParameter("kaptcha.textproducer.font.color", fcolor); // 字体颜色
        servlet.addInitParameter("kaptcha.image.width", width);// 图片宽度
        servlet.addInitParameter("kaptcha.textproducer.char.string", cString);// 使用哪些字符生成验证码
        servlet.addInitParameter("kaptcha.image.height", height);// 图片高度
        servlet.addInitParameter("kaptcha.textproducer.font.size", fsize);// 字体大小
        servlet.addInitParameter("kaptcha.noise.color", nColor);// 干扰线的颜色
        servlet.addInitParameter("kaptcha.textproducer.char.length", clength);// 字符个数
        servlet.addInitParameter("kaptcha.textproducer.font.names", fnames);// 字体
        return servlet;
    }


    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

Controller层验证:

package com.example.kaptcha1.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.RequestMapping;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;

@Controller
public class CodeController {
    @Autowired
    private Producer captchaProducer = null;
    @RequestMapping("/kaptcha")
    public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
        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);
        //向客户端写出
        BufferedImage bi = captchaProducer.createImage(capText);
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(bi, "jpg", out);
        try {
            out.flush();
        } finally {
            out.close();
        }
    }
}

###至此 三种kaptcha配置验证码的方式介绍完毕(码字不易,如果有帮助请给上小星星,嘻嘻)。

最后

以上就是唠叨钢笔为你收集整理的Java web验证码——kaptcha的三种配置方式Java web验证码——kaptcha的使用(1)Java web验证码——kaptcha的使用(2)Java web验证码——kaptcha的使用(3)的全部内容,希望文章能够帮你解决Java web验证码——kaptcha的三种配置方式Java web验证码——kaptcha的使用(1)Java web验证码——kaptcha的使用(2)Java web验证码——kaptcha的使用(3)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部