当前位置:首页 » 《随便一记》 » 正文

【案例实战】SpringBoot整合Redis连接池生成图形验证码

13 人参与  2022年11月15日 08:44  分类 : 《随便一记》  评论

点击全文阅读


文章目录

1.需求背景2.Docker急速部署Redis3.搭建SpringBoot项目4.开发图形验证码

1.需求背景

很多人都用手机注册一些网站的验证了,比如手机验证码。先填手机号,然后发一条验证码过去,输入验证码,完成验证,注册成功。为了避免自己的网站被刷,增加图形验证码。当然为了防止网站被刷还不止这一种办法。

2.Docker急速部署Redis

#创建文件夹mkdir -p /usr/local/data/redis/datadocker run -itd --name redis -p 6379:6379 -v /usr/local/data/redis/data:/data redis:6.2.4 --requirepass 123456

在这里插入图片描述

在这里插入图片描述

3.搭建SpringBoot项目

(1)添加依赖

    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.6.7</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.18.20</version>            <scope>compile</scope>        </dependency>    </dependencies>

(2)创建启动主类

@SpringBootApplicationpublic class KaptchaApplication {    public static void main(String[] args) {        SpringApplication.run(KaptchaApplication.class, args);    }}

(3)创建yml

server:  port: 8012spring:  application:    name: kaptcha-server

(4)启动验证

在这里插入图片描述

4.开发图形验证码

(1)添加Maven依赖

        <!--redis客户端-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>            <exclusions>                <exclusion>                    <groupId>io.lettuce</groupId>                    <artifactId>lettuce-core</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>redis.clients</groupId>            <artifactId>jedis</artifactId>        </dependency>        <!--kaptcha依赖包-->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>kaptcha-spring-boot-starter</artifactId>            <version>1.1.0</version>        </dependency>

(2)yml配置Redis

  # 配置redis  redis:    # redis类型,jedis和lettuce    client-type: jedis    host: 192.168.139.101    password: 123456    port: 6379    jedis:      pool:        # 连接池最大连接数(使用负值表示没有限制)        max-active: 100        # 连接池中的最大空闲连接        max-idle: 100        # 连接池中的最小空闲连接        min-idle: 100        # 连接池最大阻塞等待时间(使用负值表示没有限制)        max-wait: 60000

(3)配置CaptchaConfig

/** * 图形验证码配置类 * @author lixiang */@Configurationpublic class CaptchaConfig {    /**     * 验证码配置     * Kaptcha配置类名     * @return     */    @Bean    @Qualifier("captchaProducer")    public DefaultKaptcha kaptcha() {        DefaultKaptcha kaptcha = new DefaultKaptcha();        Properties properties = new Properties();        //properties.setProperty(Constants.KAPTCHA_BORDER, "yes");        //properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "220,220,220");        //properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "38,29,12");        //properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "147");        //properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "34");        //properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "25");        //properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");        //验证码个数        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");        //properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Courier");        //字体间隔        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,"8");        //干扰线颜色        //properties.setProperty(Constants.KAPTCHA_NOISE_COLOR, "white");        //干扰实现类        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");        //图片样式        properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.WaterRipple");        //文字来源        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789");        Config config = new Config(properties);        kaptcha.setConfig(config);        return kaptcha;    }}

(4)配置RedisTemplate

/** * redisTemplate配置类 * @author lixiang */@Configurationpublic class RedisTemplateConfiguration {    @Bean    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(redisConnectionFactory);        //配置序列化规则        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);        ObjectMapper objectMapper = new ObjectMapper();        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);        //设置key-value的序列化规则        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);        return redisTemplate;    }}

(5)编写Controller测试

@RestController@RequestMapping("/kaptcha")@Slf4jpublic class KaptchaController {    @Autowired    private StringRedisTemplate redisTemplate;    @Autowired    private Producer captchaProducer;    /**     * 设置过期时间10min     */    private static final long CAPTCHA_CODE_EXPIRED = 60 * 1000;    /**     * 获取图形验证码     * @param request     * @param response     */    @GetMapping("/get_captcha")    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){        //创建验证码内容        String captchaText = captchaProducer.createText();        log.info("图形验证码内容为:{}",captchaText);        redisTemplate.opsForValue().set(getCaptchaKey(request),captchaText,CAPTCHA_CODE_EXPIRED, TimeUnit.MILLISECONDS);        //生成图片        BufferedImage captchaImage = captchaProducer.createImage(captchaText);        try(ServletOutputStream outputStream = response.getOutputStream()){            ImageIO.write(captchaImage,"jpg",outputStream);        }catch (IOException e){            log.error("获取流出错:"+e.getMessage());        }    }    /**     * 获取图形验证码的缓存key     * @param request     * @return     */    private String getCaptchaKey(HttpServletRequest request) {        String userAgent = request.getHeader("User-Agent");        return "account:captcha:"+ userAgent;    }}

在这里插入图片描述

查看redis中的key

在这里插入图片描述


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/48436.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 绣球招亲后,逼我形婚的赤狐少君悔疯了列表_绣球招亲后,逼我形婚的赤狐少君悔疯了(黄辛)
  • 宋青禾徐楚尧+后续+结局优质全章(徐楚尧宋青禾)_宋青禾徐楚尧+后续+结局优质全章徐楚尧宋青禾
  • 完结文我的女儿变成了儿子列表_完结文我的女儿变成了儿子(周子航)
  • 老婆嫌我给她做的寿衣晦气,离婚后悔疯了版(周倩倩)_老婆嫌我给她做的寿衣晦气,离婚后悔疯了版周倩倩
  • 完结文不能说的秘密在线列表_完结文不能说的秘密在线(夏南荨季司聿)
  • [爱,在转身处绽放]最新章节在线阅读_「苏瑶纪寒白薇薇」精彩节选免费试读
  • 完结文温枝意沈逾明列表_完结文温枝意沈逾明
  • 宁若曦沈砚舟黎思结局+番外+后续列表_宁若曦沈砚舟黎思结局+番外+后续
  • 傅寂轩巫镜尘(荃本哥哥为陪学妹,害***和+后续+结局)_傅寂轩巫镜尘_笔趣阁(荃本哥哥为陪学妹,害***和+后续+结局)
  • 全文哥哥为陪学妹害***和我丧命全书+后续+结局(傅寂轩巫镜尘)列表_全文哥哥为陪学妹害***和我丧命全书+后续+结局
  • 哥哥为陪学妹害***和我丧命全书+后续+结局(傅寂轩巫镜尘)列表_哥哥为陪学妹害***和我丧命全书+后续+结局(傅寂轩巫镜尘)哥哥为陪学妹害***和我丧命全书+后续+结局在线
  • 朱颜何用苦相侵完结版免费阅读_[顾锦念裴钰楚君澜]完结版全文

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1