其他分享
首页 > 其他分享> > 常用功能系列---【hutool生成验证码】

常用功能系列---【hutool生成验证码】

作者:互联网

1.后端代码

    @ApiOperation("获取验证码")
    @GetMapping("/getImage")
    public R ImgCode(HttpServletRequest request, HttpServletResponse response) {
        // 保存验证码信息
        String uuid = IdUtil.simpleUUID();
        // 生成验证码
        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(500, 200,4,100);
        captcha.setBackground(Color.BLACK);
        System.out.println("验证码为:" + captcha.getCode());
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try {
            ImageIO.write(captcha.getImage(), "jpg", os);
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
//        redisTemplate.opsForValue(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("uuid", uuid);
        hashMap.put("img", Base64.encode(os.toByteArray()));
        return R.data(hashMap);
    }

2.前端代码

<div class='login_box'>
      <p>欢迎登录FAST-BOOT系统!</p>
      <div class='login_form'>
        <el-form :model='ruleForm' status-icon :rules='rules' ref='loginFormRef' label-width='25%'
                 class='demo-ruleForm'>
          <el-form-item label='用户名' prop='loginName'>
            <el-input prefix-icon='iconfont icon-yonghuming' v-model='ruleForm.loginName'></el-input>
          </el-form-item>
          <el-form-item label='密码' prop='pwd'>
            <el-input prefix-icon='iconfont icon-tianchongxing-' type='password' v-model='ruleForm.pwd'
                      autocomplete='off'></el-input>
          </el-form-item>
          <el-form-item label='验证码' prop='code'>
            <el-row>
              <el-col :span="10">
                <el-input  v-model='ruleForm.loginName'></el-input>
              </el-col>
              <el-col :span="12">
                  <img :src="codeUrl" style="margin-left:10px;width:100%;height: 36px" @click="getCode" class="login-code-img"/>
              </el-col>
            </el-row>

          </el-form-item>
          <el-form-item>
            <el-button type='primary' @click="submitForm('loginFormRef')">提交</el-button>
            <el-button @click="resetForm('loginFormRef')">重置</el-button>
          </el-form-item>
        </el-form>
      </div>


<script>
import axios from 'axios'

export default {
  data() {
    var validatePass = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请输入密码'))
      } else {
        callback()
      }
    }
    var validateUsername = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请输入用户名'))
      } else {
        callback()
      }
    }
    return {
      codeUrl: '',
      ruleForm: {
        pwd: '',
        loginName: '',
        uuid: ''
      },
      rules: {
        loginName: [
          {validator: validateUsername, trigger: 'blur'}
        ],
        pwd: [
          {validator: validatePass, trigger: 'blur'},
          {min: 6, max: 16, message: '密码长度应在6到16个字符之间', trigger: 'blur'}
        ]

      }
    }
  },
  mounted() {
    this.getCode()
  },
  methods: {
    getCode: function () {
      axios.get('/login/getImage').then((res) => {
        console.log("res", res)
        if (res.data.success) {
          this.codeUrl = "data:image/gif;base64," + res.data.data.img;
          this.ruleForm.uuid = res.data.data.uuid;
        }
      })
    },
    submitForm: function (formName) {
      
    },
    resetForm(formName) {
      this.$refs[formName].resetFields()
    }
  }
}
</script>

最终效果:

 

标签:uuid,res,hutool,验证码,---,callback,new,data
来源: https://www.cnblogs.com/hujunwei/p/16557597.html