mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-10-31 22:57:19 +08:00 
			
		
		
		
	feat: 新增图形验证码自动配置(验证码模块)
This commit is contained in:
		| @@ -0,0 +1,25 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <parent> | ||||||
|  |         <groupId>top.charles7c.continew</groupId> | ||||||
|  |         <artifactId>continew-starter-captcha</artifactId> | ||||||
|  |         <version>${revision}</version> | ||||||
|  |     </parent> | ||||||
|  |  | ||||||
|  |     <artifactId>continew-starter-captcha-graphic</artifactId> | ||||||
|  |     <packaging>jar</packaging> | ||||||
|  |  | ||||||
|  |     <name>${project.artifactId}</name> | ||||||
|  |     <description>ContiNew Starter 验证码模块 - 图形验证码</description> | ||||||
|  |  | ||||||
|  |     <dependencies> | ||||||
|  |         <!-- Easy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目) --> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.github.whvcse</groupId> | ||||||
|  |             <artifactId>easy-captcha</artifactId> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  | </project> | ||||||
| @@ -0,0 +1,41 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.captcha.graphic.autoconfigure; | ||||||
|  |  | ||||||
|  | import jakarta.annotation.PostConstruct; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.boot.autoconfigure.AutoConfiguration; | ||||||
|  | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
|  | import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 图形验证码自动配置 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.0.0 | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | @AutoConfiguration | ||||||
|  | @EnableConfigurationProperties(GraphicCaptchaProperties.class) | ||||||
|  | @ConditionalOnProperty(prefix = "captcha.graphic", name = "enabled", havingValue = "true") | ||||||
|  | public class GraphicCaptchaAutoConfiguration { | ||||||
|  |  | ||||||
|  |     @PostConstruct | ||||||
|  |     public void postConstruct() { | ||||||
|  |         log.info("[ContiNew Starter] - Auto Configuration 'Graphic Captcha' completed initialization."); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,89 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.captcha.graphic.autoconfigure; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.util.ReflectUtil; | ||||||
|  | import cn.hutool.core.util.StrUtil; | ||||||
|  | import com.wf.captcha.base.Captcha; | ||||||
|  | import lombok.Data; | ||||||
|  | import org.springframework.boot.context.properties.ConfigurationProperties; | ||||||
|  | import top.charles7c.continew.starter.captcha.graphic.enums.GraphicCaptchaTypeEnum; | ||||||
|  |  | ||||||
|  | import java.awt.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 图形验证码配置属性 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.0.0 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ConfigurationProperties(prefix = "captcha.graphic") | ||||||
|  | public class GraphicCaptchaProperties { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 是否启用图形验证码 | ||||||
|  |      */ | ||||||
|  |     private boolean enabled = false; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 类型 | ||||||
|  |      */ | ||||||
|  |     private GraphicCaptchaTypeEnum type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 内容长度 | ||||||
|  |      */ | ||||||
|  |     private int length = 4; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 宽度 | ||||||
|  |      */ | ||||||
|  |     private int width = 111; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 高度 | ||||||
|  |      */ | ||||||
|  |     private int height = 36; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 字体 | ||||||
|  |      */ | ||||||
|  |     private String fontName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 字体大小 | ||||||
|  |      */ | ||||||
|  |     private int fontSize = 25; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取图形验证码 | ||||||
|  |      * | ||||||
|  |      * @return 图形验证码 | ||||||
|  |      */ | ||||||
|  |     public Captcha getCaptcha() { | ||||||
|  |         if (this.enabled) { | ||||||
|  |             Captcha captcha = ReflectUtil.newInstance(this.type.getCaptchaImpl(), this.width, this.height); | ||||||
|  |             captcha.setLen(this.length); | ||||||
|  |             if (StrUtil.isNotBlank(this.fontName)) { | ||||||
|  |                 captcha.setFont(new Font(fontName, Font.PLAIN, this.fontSize)); | ||||||
|  |             } | ||||||
|  |             return captcha; | ||||||
|  |         } | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,64 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.captcha.graphic.enums; | ||||||
|  |  | ||||||
|  | import com.wf.captcha.*; | ||||||
|  | import com.wf.captcha.base.Captcha; | ||||||
|  | import lombok.Getter; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 图形验证码类型枚举 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.0.0 | ||||||
|  |  */ | ||||||
|  | @Getter | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | public enum GraphicCaptchaTypeEnum { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 算术 | ||||||
|  |      */ | ||||||
|  |     ARITHMETIC(ArithmeticCaptcha.class), | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 中文 | ||||||
|  |      */ | ||||||
|  |     CHINESE(ChineseCaptcha.class), | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 中文闪图 | ||||||
|  |      */ | ||||||
|  |     CHINESE_GIF(ChineseGifCaptcha.class), | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 闪图 | ||||||
|  |      */ | ||||||
|  |     GIF(GifCaptcha.class), | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 特殊类型 | ||||||
|  |      */ | ||||||
|  |     SPEC(SpecCaptcha.class), | ||||||
|  |     ; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 验证码实现 | ||||||
|  |      */ | ||||||
|  |     private final Class<? extends Captcha> captchaImpl; | ||||||
|  | } | ||||||
| @@ -0,0 +1 @@ | |||||||
|  | top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaAutoConfiguration | ||||||
							
								
								
									
										29
									
								
								continew-starter-captcha/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								continew-starter-captcha/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <parent> | ||||||
|  |         <groupId>top.charles7c.continew</groupId> | ||||||
|  |         <artifactId>continew-starter</artifactId> | ||||||
|  |         <version>${revision}</version> | ||||||
|  |     </parent> | ||||||
|  |  | ||||||
|  |     <artifactId>continew-starter-captcha</artifactId> | ||||||
|  |     <packaging>pom</packaging> | ||||||
|  |  | ||||||
|  |     <name>${project.artifactId}</name> | ||||||
|  |     <description>ContiNew Starter 验证码模块</description> | ||||||
|  |  | ||||||
|  |     <modules> | ||||||
|  |         <module>continew-starter-captcha-graphic</module> | ||||||
|  |     </modules> | ||||||
|  |  | ||||||
|  |     <dependencies> | ||||||
|  |         <!-- 核心模块 --> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>top.charles7c.continew</groupId> | ||||||
|  |             <artifactId>continew-starter-core</artifactId> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  | </project> | ||||||
| @@ -36,7 +36,7 @@ import org.springframework.context.annotation.Bean; | |||||||
| import org.springframework.transaction.annotation.EnableTransactionManagement; | import org.springframework.transaction.annotation.EnableTransactionManagement; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * MyBatis Plus 配置 |  * MyBatis Plus 自动配置 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 1.0.0 |  * @since 1.0.0 | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ | |||||||
|         <dynamic-datasource.version>4.2.0</dynamic-datasource.version> |         <dynamic-datasource.version>4.2.0</dynamic-datasource.version> | ||||||
|         <p6spy.version>3.9.1</p6spy.version> |         <p6spy.version>3.9.1</p6spy.version> | ||||||
|         <redisson.version>3.24.3</redisson.version> |         <redisson.version>3.24.3</redisson.version> | ||||||
|  |         <easy-captcha.version>1.6.2</easy-captcha.version> | ||||||
|         <knife4j.version>4.3.0</knife4j.version> |         <knife4j.version>4.3.0</knife4j.version> | ||||||
|         <hutool.version>5.8.23</hutool.version> |         <hutool.version>5.8.23</hutool.version> | ||||||
|     </properties> |     </properties> | ||||||
| @@ -93,6 +94,13 @@ | |||||||
|                 <version>${redisson.version}</version> |                 <version>${redisson.version}</version> | ||||||
|             </dependency> |             </dependency> | ||||||
|  |  | ||||||
|  |             <!-- Easy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目) --> | ||||||
|  |             <dependency> | ||||||
|  |                 <groupId>com.github.whvcse</groupId> | ||||||
|  |                 <artifactId>easy-captcha</artifactId> | ||||||
|  |                 <version>${easy-captcha.version}</version> | ||||||
|  |             </dependency> | ||||||
|  |  | ||||||
|             <!-- Knife4j(前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案) --> |             <!-- Knife4j(前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案) --> | ||||||
|             <dependency> |             <dependency> | ||||||
|                 <groupId>com.github.xiaoymin</groupId> |                 <groupId>com.github.xiaoymin</groupId> | ||||||
| @@ -124,6 +132,13 @@ | |||||||
|                 <version>${revision}</version> |                 <version>${revision}</version> | ||||||
|             </dependency> |             </dependency> | ||||||
|  |  | ||||||
|  |             <!-- 验证码模块 - 图形验证码 --> | ||||||
|  |             <dependency> | ||||||
|  |                 <groupId>top.charles7c.continew</groupId> | ||||||
|  |                 <artifactId>continew-starter-captcha-graphic</artifactId> | ||||||
|  |                 <version>${revision}</version> | ||||||
|  |             </dependency> | ||||||
|  |  | ||||||
|             <!-- API 文档模块 --> |             <!-- API 文档模块 --> | ||||||
|             <dependency> |             <dependency> | ||||||
|                 <groupId>top.charles7c.continew</groupId> |                 <groupId>top.charles7c.continew</groupId> | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -71,6 +71,7 @@ | |||||||
|         <module>continew-starter-core</module> |         <module>continew-starter-core</module> | ||||||
|         <module>continew-starter-json</module> |         <module>continew-starter-json</module> | ||||||
|         <module>continew-starter-api-doc</module> |         <module>continew-starter-api-doc</module> | ||||||
|  |         <module>continew-starter-captcha</module> | ||||||
|         <module>continew-starter-cache</module> |         <module>continew-starter-cache</module> | ||||||
|         <module>continew-starter-data</module> |         <module>continew-starter-data</module> | ||||||
|     </modules> |     </modules> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user