ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

验证码工具-easy-captcha

2022-05-08 11:33:17  阅读:283  来源: 互联网

标签:redis String text request 验证码 captcha easy import uuid


   <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>
package com.msb.controller;

import com.msb.annotations.TokenCheck;
import com.ramostear.captcha.HappyCaptcha;
import com.ramostear.captcha.support.CaptchaStyle;
import com.ramostear.captcha.support.CaptchaType;
import com.wf.captcha.ArithmeticCaptcha;
import com.wf.captcha.ChineseCaptcha;
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.utils.CaptchaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.UUID;

/**
 * @author lcc
 * @version V1.0
 * @Package com.msb.code
 * @date 2022/5/8 7:49
 */
@RestController
@RequestMapping("/easy-captcha")
public class EasyCaptchaController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    @GetMapping("/generator")
    @TokenCheck(required = false)
    public void generatorCode(HttpServletRequest request, HttpServletResponse response){
        try {
            //CaptchaUtil.out(request, response);//默认4位字母验证码
            /*3个算数  运算 存储到redis*/
        /*    ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(200,50);
            arithmeticCaptcha.setLen(3);//3个数的运算
            String text = arithmeticCaptcha.text();
            System.out.println("验证码:"+text);
            stringRedisTemplate.opsForValue().set("验证码", text);
            CaptchaUtil.out(arithmeticCaptcha,request, response);*/
        /*中文存储*/
            ChineseCaptcha chineseCaptcha = new ChineseCaptcha(200,50);
            chineseCaptcha.setLen(4);
            String text = chineseCaptcha.text();
            System.out.println("验证码:"+text);
            CaptchaUtil.out(chineseCaptcha, request,response);
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @GetMapping("/verify")
    @TokenCheck(required = false)
    public String verify(String verifyCode,HttpServletRequest request){
        Boolean aBoolean=CaptchaUtil.ver(verifyCode, request);
        if(aBoolean){
            CaptchaUtil.clear(request);
            return "通过";
        }
        return "不通过";
    }
    
    /*怎么将验证码存入redis  实现多机器验证*/
    @GetMapping("/generator-redis")
    @TokenCheck(required = false)
    public void generatorCodeRedis(HttpServletRequest request, HttpServletResponse response){
        
            SpecCaptcha specCaptcha = new SpecCaptcha(200,100);
            String text = specCaptcha.text();
            System.out.println("验证码:"+text);//验证码
            String id = request.getSession().getId();
            System.out.println("sessionID:"+id);
            stringRedisTemplate.opsForValue().set(id, text);
        try {
            CaptchaUtil.out(specCaptcha,request, response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @GetMapping("/verify-redis")
    @TokenCheck(required = false)
    public String verifyRedis(String verifyCode,HttpServletRequest request){
        String id = request.getSession().getId();
        String c = stringRedisTemplate.opsForValue().get(id);
        System.out.println("sessionID"+id);
        Boolean aBoolean=CaptchaUtil.ver(verifyCode, request);
        if(verifyCode.equals(c)){
            CaptchaUtil.clear(request);
            return "通过";
        }
        return "不通过";
    }
    
    @GetMapping("/generatorUUid-redis")
    @TokenCheck(required = false)
    public HashMap<String, String> generatorUUidCodeRedis(HttpServletRequest request, HttpServletResponse response){
        SpecCaptcha specCaptcha = new SpecCaptcha(200,50);
        String text = specCaptcha.text();
        System.out.println("验证码:"+text);
        /*uuid 和 base64 作为key  value 返回*/
        String uuid = UUID.randomUUID().toString();
        String base64 = specCaptcha.toBase64();
        int index = base64.indexOf(",");
        String substring = base64.substring(index + 1);
        System.out.println("base64:"+substring);
       HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("uuid", uuid);//uuid 返回给前端的是截取base64图片的代码
        hashMap.put("base64", substring);//uuid 返回给前端的是截取base64图片的代码
        request.getSession().setAttribute("uuid", uuid);
        
        stringRedisTemplate.opsForValue().set(uuid, text);//存入reids是uuid 和具体的内容结果
        return hashMap;
    }
    
    @GetMapping("/verifyUUID-redis")
    @TokenCheck(required = false)
    public String verifyUUIDRedis(String verifyCode,HttpServletRequest request){
        String uuid = request.getSession().getAttribute("uuid").toString();
        System.out.println(uuid);
        String s = stringRedisTemplate.opsForValue().get(uuid);
        System.out.println(s);
    
        // Boolean aBoolean=CaptchaUtil.ver(verifyCode, request);
        if(verifyCode.equals(s)){
            CaptchaUtil.clear(request);
            return "通过";
        }
        return "不通过";
    }
}
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.1.136:3306/dongbao?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
  profiles:
    active: dev
  redis:
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 3
    # redis服务器地址(默认为loaclhost)
    host: localhost
    # redis端口(默认为6379)
    port: 6379
    # redis访问密码(默认为空)

    # redis连接超时时间(单位毫秒)
    timeout: 0
    # redis连接池配置
    pool:
      # 最大可用连接数(默认为8,负数表示无限)
      max-active: 8
      # 最大空闲连接数(默认为8,负数表示无限)
      max-idle: 8
      # 最小空闲连接数(默认为0,该值只有为正数才有用)
      min-idle: 0
      # 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限)
      max-wait: -1
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations:
    - classpath*:/com/msb/mapper/xml/*.xml

server:
  port: 8001

 

 

标签:redis,String,text,request,验证码,captcha,easy,import,uuid
来源: https://www.cnblogs.com/Lcch/p/16245072.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有