• SpringBoot开发验证码功能


    简介

    验证码主要是用来防止恶意破解密码、刷票、论坛灌水、刷页。Kaptcha 是一个可高度配置的实用验证码生成工具,使用也很简单,这里就使用它来做验证码。

    引入依赖

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

    添加配置类

    import com.google.code.kaptcha.Producer;
    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 KaptchaConfig {
    
        @Bean
        public Producer kaptchaProducer() {
            Properties properties = new Properties();
            properties.setProperty("kaptcha.image.width", "100");
            properties.setProperty("kaptcha.image.height", "40");
            properties.setProperty("kaptcha.textproducer.font.size", "32");
            properties.setProperty("kaptcha.textproducer.font.color", "0,0,0");
            properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYAZ");
            properties.setProperty("kaptcha.textproducer.char.length", "4");
            properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
    
            DefaultKaptcha kaptcha = new DefaultKaptcha();
            Config config = new Config(properties);
            kaptcha.setConfig(config);
            return kaptcha;
        }
    
    }
    

    在控制层调用

    	@Autowired
        private Producer kaptchaProducer;
        
        @RequestMapping(path = "/kaptcha", method = RequestMethod.GET)
        public void getKaptcha(HttpServletResponse response, HttpSession session) {
            // 生成验证码
            String text = kaptchaProducer.createText();
            BufferedImage image = kaptchaProducer.createImage(text);
    
            // 将验证码存入session
            session.setAttribute("kaptcha", text);
    
            // 将突图片输出给浏览器
            response.setContentType("image/png");
            try {
                OutputStream os = response.getOutputStream();
                ImageIO.write(image, "png", os);
            } catch (IOException e) {
                logger.error("响应验证码失败:" + e.getMessage());
            }
        }
        
    

    前端页面调用

    <img th:src="@{/kaptcha}" id="kaptcha" style="100px;height:40px;" class="mr-2"/>
    							
    <a href="javascript:refresh_kaptcha();" class="font-size-12 align-bottom">刷新验证码</a>
    

    验证码刷新部分js:

    这里后面随机加一个参数防止浏览器误以为是同一个请求而返回同一个图片

    <script>
    	function refresh_kaptcha() {
    		var path = CONTEXT_PATH + "/kaptcha?p=" + Math.random();
    		$("#kaptcha").attr("src", path);
    	}
    </script>
    

    附:Kaptcha 详细配置表

    Constant 描述 默认值
    kaptcha.border 图片边框,合法值:yes , no yes
    kaptcha.border.color 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. black
    kaptcha.image.width 图片宽 200
    kaptcha.image.height 图片高 50
    kaptcha.producer.impl 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
    kaptcha.textproducer.impl 文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
    kaptcha.textproducer.char.string 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
    kaptcha.textproducer.char.length 验证码长度 5
    kaptcha.textproducer.font.names 字体 Arial, Courier
    kaptcha.textproducer.font.size 字体大小 40px.
    kaptcha.textproducer.font.color 字体颜色,合法值: r,g,b 或者 white,black,blue. black
    kaptcha.textproducer.char.space 文字间隔 2
    kaptcha.noise.impl 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
    kaptcha.noise.color 干扰 颜色,合法值: r,g,b 或者 white,black,blue. black
    kaptcha.obscurificator.impl 图片样式:
    水纹 com.google.code.kaptcha.impl.WaterRipple
    鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy
    阴影 com.google.code.kaptcha.impl.ShadowGimpy
    com.google.code.kaptcha.impl.WaterRipple
    kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
    kaptcha.background.clear.from 背景颜色渐变,开始颜色 light grey
    kaptcha.background.clear.to 背景颜色渐变, 结束颜色 white
    kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
    kaptcha.session.key session key KAPTCHA_SESSION_KEY
    kaptcha.session.date session date KAPTCHA_SESSION_DATE
  • 相关阅读:
    网络图片获取工具类
    压缩、解压工具类
    字符串排序简单的工具类,数组转list,list转数组
    mysql 实现 sqlserver的row_number over() 方法
    Mysql安装配置及常见问题解决
    Mysql数据库主从配置
    PageHelper:在系统中发现了多个分页插件,请检查系统配置
    Kibana-Elasticsearch分析工具
    Elasticsearch基础环境配置和使用
    取消IDEA双击shift时出现的全局搜索
  • 原文地址:https://www.cnblogs.com/chen88/p/11901062.html
Copyright © 2020-2023  润新知