ICode9

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

验证码工具-kaptcha

2022-05-08 16:02:36  阅读:136  来源: 互联网

标签:return String kaptcha 验证码 import 工具 com public


<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>kaptcha-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>
package com.msb.controller;

import com.baomidou.kaptcha.Kaptcha;
import com.msb.annotations.TokenCheck;
import com.msb.overwriterGoogleKaptch.MyGoogleKaptcha;
import com.wf.captcha.utils.CaptchaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author lcc
 * @version V1.0
 * @Package com.msb.controller
 * @date 2022/5/8 11:18
 */
@RestController
@RequestMapping("/Kcaptcha")
public class KcaptchaController {
    @Autowired
    private Kaptcha kaptcha;
    @Autowired
    private MyGoogleKaptcha myGoogleKaptcha;
    @GetMapping("/generator")
    @TokenCheck(required = false)
    public void generatorCode(HttpServletRequest request, HttpServletResponse response){
        
        kaptcha.render();
    }
    
    @GetMapping("/validTime")
    public String validWithTime(String verifyCode,HttpServletRequest request) {
        boolean aBoolean = kaptcha.validate(verifyCode, 10);
       
        System.out.println(verifyCode);
        if(aBoolean){
           
            return "通过";
        }
        return "不通过";
    }
    
    
    
    @GetMapping("/verify")
    @TokenCheck(required = false)
    public String verify(String verifyCode,HttpServletRequest request){
        System.out.println(verifyCode);
        Boolean aBoolean= kaptcha.validate(verifyCode);
        if(aBoolean){
           
            return "通过";
        }
        return "不通过";
    }
    
    /*自定义  设置存储在redis 里面  */
    @GetMapping("/generator-My")
    @TokenCheck(required = false)
    public void generatorMyCode(HttpServletRequest request){
    
        myGoogleKaptcha.render();
    }
    
    
    @GetMapping("/verify-My")
    @TokenCheck(required = false)
    public String verifyMycode(String verifyCode){
        Boolean aBoolean= myGoogleKaptcha.validate(verifyCode);
        if(aBoolean){
            return "通过";
        }
        return "不通过";
    }
    
    
    
}
package com.msb.overwriterGoogleKaptch;

/**
 * @author lcc
 * @version V1.0
 * @Package com.msb.overwriterGoogleKaptch
 * @date 2022/5/8 14:40
 */

import com.baomidou.kaptcha.Kaptcha;
import com.baomidou.kaptcha.exception.KaptchaIncorrectException;
import com.baomidou.kaptcha.exception.KaptchaNotFoundException;
import com.baomidou.kaptcha.exception.KaptchaRenderException;
import com.baomidou.kaptcha.exception.KaptchaTimeoutException;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import java.io.IOException;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import lombok.NonNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyGoogleKaptcha implements Kaptcha {
    private static final Logger log = LoggerFactory.getLogger(com.baomidou.kaptcha.GoogleKaptcha.class);
    private DefaultKaptcha kaptcha;
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private HttpServletResponse response;
    @Autowired
    StringRedisTemplate stringRedisTemplate;
    
    public MyGoogleKaptcha(DefaultKaptcha kaptcha) {
        this.kaptcha = kaptcha;
    }
    
    public String render() {
        this.response.setDateHeader("Expires", 0L);
        this.response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        this.response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        this.response.setHeader("Pragma", "no-cache");
        this.response.setContentType("image/jpeg");
        String sessionCode = this.kaptcha.createText();
        System.out.println(sessionCode);
        //String uuid = UUID.randomUUID().toString();
        String id = request.getSession().getId();
        try {
            ServletOutputStream out = this.response.getOutputStream();
            stringRedisTemplate.opsForValue().set(id, sessionCode);
            Throwable var3 = null;
    
            ImageIO.write(kaptcha.createImage(sessionCode), "jpg", out);
            return sessionCode;
        } catch (IOException e) {
            throw new KaptchaRenderException(e);
        }
    }
            
            

    
    public boolean validate(String code) {
        return this.validate(code, 900L);
    }
    
    public boolean validate( String code, long second) {
       
           // HttpSession httpSession = this.request.getSession(false);
        String id = request.getSession().getId();
        String s = stringRedisTemplate.opsForValue().get(id);
        
        if(code.equals(s)){
            stringRedisTemplate.delete(id);
            return true;
        }else {
    
        return false;
        }
        
       
    }
       
}
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

kaptcha:
  height: 50
  width: 200
  content:
    length: 4
    source: abcdefghjklmnopqrstuvwxyz23456789
    space: 2
  font:
    color: black
    name: Arial
    size: 40
  background-color:
    from: red
    to: white
  border:
    enabled: true
    color: black
    thickness: 1

 

标签:return,String,kaptcha,验证码,import,工具,com,public
来源: https://www.cnblogs.com/Lcch/p/16245804.html

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

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

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

ICode9版权所有