mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-04 22:57:12 +08:00 
			
		
		
		
	refactor: 适配 ContiNew Starter 图形验证码
This commit is contained in:
		@@ -29,10 +29,10 @@
 | 
			
		||||
            <artifactId>continew-starter-cache-redisson</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- ContiNew Starter JSON 模块 - Jackson -->
 | 
			
		||||
        <!-- ContiNew Starter 验证码模块 - 图形验证码 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>top.charles7c.continew</groupId>
 | 
			
		||||
            <artifactId>continew-starter-json-jackson</artifactId>
 | 
			
		||||
            <artifactId>continew-starter-captcha-graphic</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- ContiNew Starter API 文档模块 -->
 | 
			
		||||
@@ -41,6 +41,12 @@
 | 
			
		||||
            <artifactId>continew-starter-api-doc</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- ContiNew Starter JSON 模块 - Jackson -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>top.charles7c.continew</groupId>
 | 
			
		||||
            <artifactId>continew-starter-json-jackson</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- ################ Spring Boot 相关 ################ -->
 | 
			
		||||
        <!-- Java 邮件支持 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
@@ -106,11 +112,5 @@
 | 
			
		||||
            <groupId>net.dreamlu</groupId>
 | 
			
		||||
            <artifactId>mica-ip2region</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Easy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目) -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.github.whvcse</groupId>
 | 
			
		||||
            <artifactId>easy-captcha</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -16,20 +16,10 @@
 | 
			
		||||
 | 
			
		||||
package top.charles7c.cnadmin.common.config.mybatis;
 | 
			
		||||
 | 
			
		||||
import org.mybatis.spring.annotation.MapperScan;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.DbType;
 | 
			
		||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 | 
			
		||||
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
 | 
			
		||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.net.NetUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MyBatis Plus 配置
 | 
			
		||||
 
 | 
			
		||||
@@ -19,17 +19,12 @@ package top.charles7c.cnadmin.common.config.properties;
 | 
			
		||||
import java.awt.*;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.wf.captcha.*;
 | 
			
		||||
import com.wf.captcha.base.Captcha;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.ReflectUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码配置属性
 | 
			
		||||
@@ -43,9 +38,10 @@ import cn.hutool.core.util.StrUtil;
 | 
			
		||||
public class CaptchaProperties {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 图片验证码配置
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private CaptchaImage image;
 | 
			
		||||
    @Value("${captcha.graphic.expirationInMinutes}")
 | 
			
		||||
    private long expirationInMinutes;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 邮箱验证码配置
 | 
			
		||||
@@ -57,61 +53,6 @@ public class CaptchaProperties {
 | 
			
		||||
     */
 | 
			
		||||
    private CaptchaSms sms;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 图片验证码配置
 | 
			
		||||
     */
 | 
			
		||||
    @Data
 | 
			
		||||
    public static class CaptchaImage {
 | 
			
		||||
        /**
 | 
			
		||||
         * 类型
 | 
			
		||||
         */
 | 
			
		||||
        private CaptchaImageTypeEnum type;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 内容长度
 | 
			
		||||
         */
 | 
			
		||||
        private int length;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 过期时间
 | 
			
		||||
         */
 | 
			
		||||
        private long expirationInMinutes;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 宽度
 | 
			
		||||
         */
 | 
			
		||||
        private int width = 111;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 高度
 | 
			
		||||
         */
 | 
			
		||||
        private int height = 36;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 字体
 | 
			
		||||
         */
 | 
			
		||||
        private String fontName;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 字体大小
 | 
			
		||||
         */
 | 
			
		||||
        private int fontSize = 25;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 获取图片验证码对象
 | 
			
		||||
         *
 | 
			
		||||
         * @return 验证码对象
 | 
			
		||||
         */
 | 
			
		||||
        public Captcha getCaptcha() {
 | 
			
		||||
            Captcha captcha = ReflectUtil.newInstance(type.getClazz(), this.width, this.height);
 | 
			
		||||
            captcha.setLen(length);
 | 
			
		||||
            if (StrUtil.isNotBlank(this.fontName)) {
 | 
			
		||||
                captcha.setFont(new Font(this.fontName, Font.PLAIN, this.fontSize));
 | 
			
		||||
            }
 | 
			
		||||
            return captcha;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 邮箱验证码配置
 | 
			
		||||
     */
 | 
			
		||||
@@ -163,42 +104,4 @@ public class CaptchaProperties {
 | 
			
		||||
         */
 | 
			
		||||
        private String templateId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 图片验证码类型枚举
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    @RequiredArgsConstructor
 | 
			
		||||
    private enum CaptchaImageTypeEnum {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 算术
 | 
			
		||||
         */
 | 
			
		||||
        ARITHMETIC(ArithmeticCaptcha.class),
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 中文
 | 
			
		||||
         */
 | 
			
		||||
        CHINESE(ChineseCaptcha.class),
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 中文闪图
 | 
			
		||||
         */
 | 
			
		||||
        CHINESE_GIF(ChineseGifCaptcha.class),
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 闪图
 | 
			
		||||
         */
 | 
			
		||||
        GIF(GifCaptcha.class),
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 特殊类型
 | 
			
		||||
         */
 | 
			
		||||
        SPEC(SpecCaptcha.class),;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 验证码字节码类型
 | 
			
		||||
         */
 | 
			
		||||
        private final Class<? extends Captcha> clazz;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,7 @@ import top.charles7c.cnadmin.common.util.MailUtils;
 | 
			
		||||
import top.charles7c.cnadmin.common.util.TemplateUtils;
 | 
			
		||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
 | 
			
		||||
import top.charles7c.continew.starter.cache.redisson.util.RedisUtils;
 | 
			
		||||
import top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaProperties;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码 API
 | 
			
		||||
@@ -73,17 +74,15 @@ public class CaptchaController {
 | 
			
		||||
 | 
			
		||||
    private final CaptchaProperties captchaProperties;
 | 
			
		||||
    private final ProjectProperties projectProperties;
 | 
			
		||||
    private final GraphicCaptchaProperties graphicCaptchaProperties;
 | 
			
		||||
 | 
			
		||||
    @Operation(summary = "获取图片验证码", description = "获取图片验证码(Base64编码,带图片格式:data:image/gif;base64)")
 | 
			
		||||
    @GetMapping("/img")
 | 
			
		||||
    public CaptchaResp getImageCaptcha() {
 | 
			
		||||
        // 生成验证码
 | 
			
		||||
        CaptchaProperties.CaptchaImage captchaImage = captchaProperties.getImage();
 | 
			
		||||
        Captcha captcha = captchaImage.getCaptcha();
 | 
			
		||||
        // 保存验证码
 | 
			
		||||
        Captcha captcha = graphicCaptchaProperties.getCaptcha();
 | 
			
		||||
        String uuid = IdUtil.fastUUID();
 | 
			
		||||
        String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_KEY_PREFIX, uuid);
 | 
			
		||||
        RedisUtils.set(captchaKey, captcha.text(), Duration.ofMinutes(captchaImage.getExpirationInMinutes()));
 | 
			
		||||
        RedisUtils.set(captchaKey, captcha.text(), Duration.ofMinutes(captchaProperties.getExpirationInMinutes()));
 | 
			
		||||
        return CaptchaResp.builder().uuid(uuid).img(captcha.toBase64()).build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -130,18 +130,15 @@ spring.mail:
 | 
			
		||||
 | 
			
		||||
--- ### 验证码配置
 | 
			
		||||
captcha:
 | 
			
		||||
  ## 图片验证码配置
 | 
			
		||||
  image:
 | 
			
		||||
  ## 图形验证码配置
 | 
			
		||||
  graphic:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    # 类型
 | 
			
		||||
    type: SPEC
 | 
			
		||||
    # 内容长度
 | 
			
		||||
    length: 4
 | 
			
		||||
    # 过期时间
 | 
			
		||||
    expirationInMinutes: 2
 | 
			
		||||
    # 宽度
 | 
			
		||||
    width: 111
 | 
			
		||||
    # 高度
 | 
			
		||||
    height: 36
 | 
			
		||||
  ## 邮箱验证码配置
 | 
			
		||||
  mail:
 | 
			
		||||
    # 内容长度
 | 
			
		||||
 
 | 
			
		||||
@@ -132,18 +132,15 @@ spring.mail:
 | 
			
		||||
 | 
			
		||||
--- ### 验证码配置
 | 
			
		||||
captcha:
 | 
			
		||||
  ## 图片验证码配置
 | 
			
		||||
  image:
 | 
			
		||||
  ## 图形验证码配置
 | 
			
		||||
  graphic:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    # 类型
 | 
			
		||||
    type: SPEC
 | 
			
		||||
    # 内容长度
 | 
			
		||||
    length: 4
 | 
			
		||||
    # 过期时间
 | 
			
		||||
    expirationInMinutes: 2
 | 
			
		||||
    # 宽度
 | 
			
		||||
    width: 111
 | 
			
		||||
    # 高度
 | 
			
		||||
    height: 36
 | 
			
		||||
  ## 邮箱验证码配置
 | 
			
		||||
  mail:
 | 
			
		||||
    # 内容长度
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								pom.xml
									
									
									
									
									
								
							@@ -38,8 +38,6 @@
 | 
			
		||||
        <justauth.version>1.16.5</justauth.version>
 | 
			
		||||
        <easyexcel.version>3.3.2</easyexcel.version>
 | 
			
		||||
        <ip2region.version>3.1.5.1</ip2region.version>
 | 
			
		||||
        <easy-captcha.version>1.6.2</easy-captcha.version>
 | 
			
		||||
        <hutool.version>5.8.22</hutool.version>
 | 
			
		||||
 | 
			
		||||
        <!-- Maven Plugin Versions  -->
 | 
			
		||||
        <spotless.version>2.40.0</spotless.version>
 | 
			
		||||
@@ -113,20 +111,6 @@
 | 
			
		||||
                <version>${ip2region.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- Easy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目) -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.github.whvcse</groupId>
 | 
			
		||||
                <artifactId>easy-captcha</artifactId>
 | 
			
		||||
                <version>${easy-captcha.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- Hutool(小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”) -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>cn.hutool</groupId>
 | 
			
		||||
                <artifactId>hutool-all</artifactId>
 | 
			
		||||
                <version>${hutool.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- ################ 本项目子模块相关 ################ -->
 | 
			
		||||
            <!-- API 模块(存放 Controller 层代码,打包部署的模块) -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user