ele-admin / EasyCaptcha

Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
Apache License 2.0
112 stars 25 forks source link

feat: 设置自定义验证码,使用方来确保验证码的随机性,比如,使用方有一个需要需要根据用户的账号或者手机号随机几位来生成验证码,就可以通… #12

Open Jiiiiiin opened 5 years ago

Jiiiiiin commented 5 years ago

将设置验证码属性方法放开了,设置自定义验证码,使用方来确保验证码的随机性,比如,使用方有一个需要需要根据用户的账号或者手机号随机几位来生成验证码,就可以通过该方法设置验证码,来实现该需求。

我们这边就有这样的需求,麻烦大佬考虑一下。

Jiiiiiin commented 5 years ago

目前的临时解决方案,反射,但是不够好,如果有这个需求的朋友可以参考:

/**
   * TODO https://github.com/whvcse/EasyCaptcha/pull/12 等待合并,将自定义数据设置到验证码生成器中
   */
  @Deprecated
  private void _setCode2ImageCodeCaptcha(ImageCode imageCode, String capText) {
    val captcha = imageCode.getCaptcha();
    try {
      val chars = captcha.getClass().getSuperclass().getDeclaredField("chars");
      chars.setAccessible(true);
      // TODO 需要手动添加随机功能,根据 imageCode的长度来进行随机
      chars.set(captcha, capText);
      captcha.setLen(capText.length());
    } catch (NoSuchFieldException | IllegalAccessException e) {
      log.error("反射设置验证码出错", e);
    }
  }