diff --git a/continew-starter-captcha/continew-starter-captcha-graphic/pom.xml b/continew-starter-captcha/continew-starter-captcha-graphic/pom.xml
new file mode 100644
index 00000000..d0c4d43d
--- /dev/null
+++ b/continew-starter-captcha/continew-starter-captcha-graphic/pom.xml
@@ -0,0 +1,25 @@
+
+
+ * 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 + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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."); + } +} diff --git a/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/autoconfigure/GraphicCaptchaProperties.java b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/autoconfigure/GraphicCaptchaProperties.java new file mode 100644 index 00000000..9e662e8d --- /dev/null +++ b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/autoconfigure/GraphicCaptchaProperties.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *
+ * 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 + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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; + } +} diff --git a/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/enums/GraphicCaptchaTypeEnum.java b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/enums/GraphicCaptchaTypeEnum.java new file mode 100644 index 00000000..4eb227ae --- /dev/null +++ b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/java/top/charles7c/continew/starter/captcha/graphic/enums/GraphicCaptchaTypeEnum.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *
+ * 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 + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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;
+}
\ No newline at end of file
diff --git a/continew-starter-captcha/continew-starter-captcha-graphic/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 00000000..32a02773
--- /dev/null
+++ b/continew-starter-captcha/continew-starter-captcha-graphic/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaAutoConfiguration
\ No newline at end of file
diff --git a/continew-starter-captcha/pom.xml b/continew-starter-captcha/pom.xml
new file mode 100644
index 00000000..49357f8f
--- /dev/null
+++ b/continew-starter-captcha/pom.xml
@@ -0,0 +1,29 @@
+
+