1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ele-admin-EasyCaptcha

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:26 fb741db

5. Больше настроек

5.1. Тип капчи

  • png-тип:
captcha.text();  // Получаем символ капчи.
captcha.textChar();  // Получаем массив символов капчи.*

*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);
captcha.setLen(3);  // Сколько цифр в числе: по умолчанию две.
captcha.getArithmeticString();  // Получаем формулу: 3+2=?
captcha.text();  // Получаем результат формулы: 5

captcha.out(outputStream);  // Выводим капчу.*

> Обратите внимание: арифметическая капча имеет параметр len, который обозначает количество цифр в числе. Для других типов капч параметр len обозначает длину капчи в символах. В арифметической капче text() возвращает результат формулы, поэтому вы должны сохранить его в сессии, а не саму формулу.*

**5.2. Типы символов капчи**
| Тип | Описание |
|:--- | :--- |
TYPE_DEFAULT | Смешанные цифры и буквы |
TYPE_ONLY_NUMBER | Только цифры |
TYPE_ONLY_CHAR | Только буквы |
TYPE_ONLY_UPPER | Только заглавные буквы |
TYPE_ONLY_LOWER | Только строчные буквы |
TYPE_NUM_AND_UPPER | Цифры и заглавные буквы |

Использование:

SpecCaptcha captcha = new SpecCaptcha(130, 48, 5); captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);


> Эффект будет только для SpecCaptcha и GifCaptcha.*

**5.3. Настройка шрифта**
Встроенные шрифты:

| Шрифт | Эффект |
|:---|:---|
Captcha.FONT_1 |  |
Captcha.FONT_2 | |
Captcha.FONT_3 |  |
Captcha.FONT_4 | |
Captcha.FONT_5 | |
Captcha.FONT_6 | |
Captcha.FONT_7 | |
Captcha.FONT_8 | |
Captcha.FONT_9 | |
Captcha.FONT_10 | |

Использование:

SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);

// Устанавливаем встроенный шрифт captcha.setFont(Captcha.FONT_1);

// Устанавливаем системный шрифт captcha.setFont(new Font("楷体", Font.PLAIN, 28));


**5.4. Вывод base64-кодирования**

SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); specCaptcha.toBase64();

// Если вы не хотите иметь заголовок data:image/png;base64, specCaptcha.toBase64(""); // Добавьте пустой параметр.*

5.5. Вывод в файл

FileOutputStream outputStream = new FileOutputStream(new File("C:/captcha.png"))
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.out(outputStream);

6. Использование в проекте с разделением на фронтэнд и бэкенд

Для проектов с разделением на фронтенд и бэкенд рекомендуется не хранить данные в сессии, а использовать Redis. Redis требует один ключ, который можно вернуть во фронтенд для проверки ввода:

@Controller
public class CaptchaController {
    @Autowired
    private RedisUtil redisUtil;
    
    @ResponseBody
    @RequestMapping("/captcha")
    public JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
        SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
        String verCode = specCaptcha.text().toLowerCase();
        String key = UUID.randomUUID().toString();
        // Храним в Redis и устанавливаем срок действия 30 минут
        redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES);
        // Возвращаем ключ и base64 во фронтенд
        return JsonResult.ok().put("key", key).put("image", ```
specCaptcha.toBase64());
    }
    
    @ResponseBody
    @PostMapping("/login")
    public JsonResult login(String username,String password,String verCode,String verKey){
        // 获取redis中的验证码
        String redisCode = redisUtil.get(verKey);
        // 判断验证码
        if (verCode==null || !redisCode.equals(verКод.trim().toLowerCase())) {
            return JsonResult.error("Проверка кода не удалась");
        }
    }  
}

Фронтенд использует ajax для получения проверочного кода:

<img id="verImg" width="130px" height="48px"/>

<script>
    var verKey;
    // Получение проверочного кода
    $.get('/captcha', function(res) {
        verKey = res.key;
        $('#verImg').attr('src', res.image);
    },'json');
    
    // Вход в систему
    $.post('/login', {
        verKey: verKey,
        verCode: '8u6h',
        username: 'admin'
        password: 'admin'
    }, function(res) {
        console.log(res);
    }, 'json');
</script>

RedisUtil можно найти здесь: https://gitee.com/whvse/RedisUtil


7. Пользовательские эффекты

 Наследуйте Captcha, чтобы реализовать метод out. Китайский проверочный код может наследовать ChineseCaptchaAbstract, а арифметический проверочный код — ArithmeticCaptchaAbstract.


8. Журнал обновлений

  • 2019-08-23 (v1.6.2)

    • Добавлено 10 красивых встроенных шрифтов, которые не зависят от системных шрифтов.

    • Добавлен арифметический проверочный код, количество цифр в операции можно настроить.

    • Добавлена функция вывода base64-кодирования.

    • В качестве мешающей линии добавлена кривая Безье.

  • 2018-08-09 (v1.5.0)

    • Добавлены конфигурации с чистыми заглавными буквами, чистыми строчными буквами, цифрами и заглавными буквами.

    • Добавлены китайский проверочный код и китайский GIF-проверочный код.

    • Добавлен эффект антиалиасинга, оптимизирован цвет текста.

    • Для удобства использования в веб-проектах добавлен CaptchaUtil.

1
https://api.gitlife.ru/oschina-mirror/ele-admin-EasyCaptcha.git
git@api.gitlife.ru:oschina-mirror/ele-admin-EasyCaptcha.git
oschina-mirror
ele-admin-EasyCaptcha
ele-admin-EasyCaptcha
master