0
点赞
收藏
分享

微信扫一扫

宝塔Linux面板5.9版本升级新版失败解决方法

Python百事通 2024-05-15 阅读 9

java生成图形验证码
在写项目的时候登录的方式有多种多样,根据需求的不同,有些是用手机号获取验证码登录,有些是需要账号,密码 + 手机验证码登录,还有写是需要账号,密码 + 图形验证码登录,不论怎样搭配大体需要的账号,密码,手机号,验证码。今天就记录下图形验证码的生成。老规矩。先把图贴上
在这里插入图片描述
该图形验证码使用的包为:

<dependency>
      <groupId>com.github.whvcse</groupId>
      <artifactId>easy-captcha</artifactId>
      <version>1.6.2</version>
 </dependency>

由于我手上的项目登录是需要账号+密码+手机号验证码+图像验证码3重校验所以图形验证码我们使用的是1.6的版本就够了。
废话不多说我直接贴上代码:

@ApiOperation(value = "获取验证码", notes = "获取验证码")
    @NoLogging
    @GetMapping("/loggincode")
    public AjaxResult getCode() {
        // gif类型
        //GifCaptcha captcha = new GifCaptcha(130, 48);

        // 中文类型
        //ChineseCaptcha captcha = new ChineseCaptcha(130, 48);

        // 中文gif类型
        //ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);
        // 算术类型
        //ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
        // png类型
        SpecCaptcha captcha = new SpecCaptcha(130, 48, 4);

        /**验证码字符类型
         TYPE_DEFAULT 数字和字母混合
         TYPE_ONLY_NUMBER 纯数字
         TYPE_ONLY_CHAR 纯字母
         TYPE_ONLY_UPPER 纯大写字母
         TYPE_ONLY_LOWER 纯小写字母
         TYPE_NUM_AND_UPPER  数字和大写字母**/
        captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);//设置纯数字验证码
        // 设置内置字体
//        captcha.setFont(Captcha.FONT_1);
        // 设置系统字体
//        captcha.setFont(new Font("楷体", Font.PLAIN, 28));
        //验证码 VUL
        String verCode;
        if(StringUtils.isNotEmpty(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable")) && "false".equals(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable"))){
            //测试环境的图形验证码为默认值1234
            verCode = "1234";
            //测试环境登录不发送短信模拟验证码
            sendSms(verCode);
        }else {
             verCode = captcha.text().toLowerCase();
        }
        //uuid KEY
        String key ="login:captcha:"+ UUID.randomUUID().toString().replaceAll("-","");
        // 存入redis并设置过期时间为5分钟
        stringRedisTemplate.opsForValue().set(key, verCode, 5, TimeUnit.MINUTES);
        // 验证码信息
        Map imgResult = new HashMap(2) {{
            put("img", captcha.toBase64());
            put("uuid", key);
        }};
        return AjaxResult.success(imgResult);
    }


private void sendSms(String verCode) {
        //校验用户账号密码成功,发送短信验证码 若为开发环境则默认验证码为123456,正式环境则随机生成验证码
        if (StringUtils.isNotEmpty(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable")) && "false".equals(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable"))) {
            redisService.setCacheObject(CACHE_KEY_SMS_VALIDATECODE + verCode, "123456", 5L, TimeUnit.MINUTES);
        }
    }

大概设置就是这样子,可以设置字体,复杂度,组合方式等。生成好的验证码我们存在了Redis中方便登录输入时校验输入准确性。可根据自己项目的需要修改。

举报

相关推荐

0 条评论