diff --git a/smart-admin-api-java17-springboot3/pom.xml b/smart-admin-api-java17-springboot3/pom.xml
index 53541df..4d8ad34 100644
--- a/smart-admin-api-java17-springboot3/pom.xml
+++ b/smart-admin-api-java17-springboot3/pom.xml
@@ -29,7 +29,6 @@
1.4.2
20.0
1.21
- 2.3.2
0.9.11
2.15.0
3.12.0
@@ -127,18 +126,6 @@
${user-agent-utils.version}
-
- com.github.penggle
- kaptcha
- ${kaptcha.version}
-
-
- javax.servlet
- *
-
-
-
-
org.reflections
reflections
diff --git a/smart-admin-api-java17-springboot3/sa-base/pom.xml b/smart-admin-api-java17-springboot3/sa-base/pom.xml
index db975a1..fed5c0e 100644
--- a/smart-admin-api-java17-springboot3/sa-base/pom.xml
+++ b/smart-admin-api-java17-springboot3/sa-base/pom.xml
@@ -143,11 +143,6 @@
guava
-
- com.github.penggle
- kaptcha
-
-
com.googlecode.concurrentlinkedhashmap
concurrentlinkedhashmap-lru
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
index c7913f1..2058b34 100644
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
@@ -1,24 +1,22 @@
package net.lab1024.sa.base.module.support.captcha;
-import com.google.code.kaptcha.impl.DefaultKaptcha;
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.core.img.ImgUtil;
+import cn.hutool.core.util.RandomUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.base.common.constant.StringConst;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.SystemEnvironment;
-import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.base.constant.RedisKeyConst;
import net.lab1024.sa.base.module.support.captcha.domain.CaptchaForm;
import net.lab1024.sa.base.module.support.captcha.domain.CaptchaVO;
import net.lab1024.sa.base.module.support.redis.RedisService;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.util.Base64Utils;
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
+import java.awt.*;
import java.util.Objects;
import java.util.UUID;
@@ -29,7 +27,7 @@ import java.util.UUID;
* @Date 2021/8/31 20:52
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
@Slf4j
@Service
@@ -40,9 +38,6 @@ public class CaptchaService {
*/
private static final long EXPIRE_SECOND = 65L;
- @Resource
- private DefaultKaptcha defaultKaptcha;
-
@Resource
private SystemEnvironment systemEnvironment;
@@ -52,20 +47,23 @@ public class CaptchaService {
/**
* 生成图形验证码
* 默认 1 分钟有效期
- *
*/
public CaptchaVO generateCaptcha() {
- String captchaText = defaultKaptcha.createText();
- BufferedImage image = defaultKaptcha.createImage(captchaText);
- String base64Code;
- try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
- ImageIO.write(image, "jpg", os);
- base64Code = Base64Utils.encodeToString(os.toByteArray());
- } catch (Exception e) {
- log.error("generateCaptcha error:", e);
- throw new BusinessException("生成验证码错误");
- }
+ //生成四位验证码
+ String captchaText = RandomUtil.randomNumbers(4);
+
+ //定义图形验证码的长、宽、验证码位数、干扰线数量
+ LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(125, 43, 4, 80);
+
+ //设置背景颜色
+ lineCaptcha.setBackground(new Color(230, 244, 255));
+
+ //生成图片
+ Image image = lineCaptcha.createImage(captchaText);
+
+ //转为base64
+ String base64Code = ImgUtil.toBase64(image, "jpg");
/*
* 返回验证码对象
@@ -88,7 +86,6 @@ public class CaptchaService {
/**
* 校验图形验证码
- *
*/
public ResponseDTO checkCaptcha(CaptchaForm captchaForm) {
if (StringUtils.isBlank(captchaForm.getCaptchaUuid()) || StringUtils.isBlank(captchaForm.getCaptchaCode())) {
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java
deleted file mode 100644
index c8bfa30..0000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.common.collect.Lists;
-
-import java.awt.*;
-import java.util.List;
-import java.util.Random;
-
-/**
- * 验证码颜色
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaColor {
-
- public static Color getColor() {
-
- List colors = Lists.newArrayList();
- colors.add(new Color(0, 135, 255));
- colors.add(new Color(51, 153, 51));
- colors.add(new Color(255, 102, 102));
- colors.add(new Color(255, 153, 0));
- colors.add(new Color(153, 102, 0));
- colors.add(new Color(153, 102, 153));
- colors.add(new Color(51, 153, 153));
- colors.add(new Color(102, 102, 255));
- colors.add(new Color(0, 102, 204));
- colors.add(new Color(204, 51, 51));
- colors.add(new Color(128, 153, 65));
- Random random = new Random();
- int colorIndex = random.nextInt(10);
- return colors.get(colorIndex);
- }
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java
deleted file mode 100644
index 3016f3a..0000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.impl.DefaultKaptcha;
-import com.google.code.kaptcha.util.Config;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.Properties;
-
-/**
- * 验证码配置
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-@Configuration
-public class CaptchaConfig {
-
- @Bean
- public DefaultKaptcha getDefaultKaptcha() {
- DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
- Properties properties = new Properties();
- properties.setProperty("kaptcha.border", "no");
- properties.setProperty("kaptcha.border.color", "34,114,200");
- properties.setProperty("kaptcha.image.width", "125");
- properties.setProperty("kaptcha.image.height", "45");
- properties.setProperty("kaptcha.textproducer.char.string", "123456789");
- properties.setProperty("kaptcha.textproducer.char.length", "4");
- properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana");
- properties.setProperty("kaptcha.textproducer.font.size", "38");
-
- properties.setProperty("kaptcha.background.clear.from", "white");
- properties.setProperty("kaptcha.background.clear.to", "white");
-
- properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName());
- properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName());
-
- Config config = new Config(properties);
- defaultKaptcha.setConfig(config);
- return defaultKaptcha;
- }
-
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java
deleted file mode 100644
index c915661..0000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.NoiseProducer;
-import com.google.code.kaptcha.util.Configurable;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
-/**
- * 验证码加噪处理
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaNoise extends Configurable implements NoiseProducer {
-
- public CaptchaNoise() {
- }
-
- @Override
- public void makeNoise(BufferedImage image, float factorOne, float factorTwo, float factorThree, float factorFour) {
-
- int width = image.getWidth();
- int height = image.getHeight();
- Graphics2D graph = (Graphics2D) image.getGraphics();
- graph.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
- graph.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
- Random random = new Random();
- int noiseLineNum = random.nextInt(3);
- if (noiseLineNum == 0) {
- noiseLineNum = 1;
- }
- for (int i = 0; i < noiseLineNum; i++) {
- graph.setColor(CaptchaColor.getColor());
- graph.drawLine(random.nextInt(width), random.nextInt(height), 10 + random.nextInt(20), 10 + random.nextInt(20));
- }
-
- graph.dispose();
- }
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java
deleted file mode 100644
index 5618be9..0000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.text.WordRenderer;
-import com.google.code.kaptcha.util.Configurable;
-
-import java.awt.*;
-import java.awt.font.FontRenderContext;
-import java.awt.font.GlyphVector;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
-/**
- * 验证码字体生成
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaWordRenderer extends Configurable implements WordRenderer {
-
- public CaptchaWordRenderer() {
- }
-
- @Override
- public BufferedImage renderWord(String word, int width, int height) {
- int fontSize = this.getConfig().getTextProducerFontSize();
- Font[] fonts = this.getConfig().getTextProducerFonts(fontSize);
- int charSpace = this.getConfig().getTextProducerCharSpace();
- BufferedImage image = new BufferedImage(width, height, 2);
-
- Graphics2D g2D = image.createGraphics();
- g2D.setColor(Color.WHITE);
- RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
- g2D.setRenderingHints(hints);
- g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
-
- FontRenderContext frc = g2D.getFontRenderContext();
- Random random = new Random();
- int startPosY = (height - fontSize) / 5 + fontSize;
- char[] wordChars = word.toCharArray();
- Font[] chosenFonts = new Font[wordChars.length];
- int[] charWidths = new int[wordChars.length];
- int widthNeeded = 0;
-
- int startPosX;
- for (startPosX = 0; startPosX < wordChars.length; ++startPosX) {
- chosenFonts[startPosX] = fonts[random.nextInt(fonts.length)];
- char[] charToDraw = new char[]{wordChars[startPosX]};
- GlyphVector gv = chosenFonts[startPosX].createGlyphVector(frc, charToDraw);
- charWidths[startPosX] = (int) gv.getVisualBounds().getWidth();
- if (startPosX > 0) {
- widthNeeded += 2;
- }
-
- widthNeeded += charWidths[startPosX];
- }
-
- startPosX = (width - widthNeeded) / 2;
-
- for (int i = 0; i < wordChars.length; ++i) {
- g2D.setColor(CaptchaColor.getColor());
- g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN));
- char[] charToDraw = new char[]{wordChars[i]};
- g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY);
- startPosX = startPosX + charWidths[i] + charSpace;
- }
-
- return image;
- }
-
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
index ad39fc4..5f90b15 100644
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
@@ -107,7 +107,7 @@ public class Level3ProtectConfigService {
* 最低活跃时间(单位:秒),超过此时间没有操作系统就会被冻结,默认-1 代表不限制,永不冻结; 默认 30分钟
*/
public int getLoginActiveTimeoutSeconds() {
- return loginActiveTimeoutSeconds;
+ return loginActiveTimeoutSeconds > 0 ? loginActiveTimeoutSeconds : -1;
}
/**
@@ -167,6 +167,7 @@ public class Level3ProtectConfigService {
if (configForm.getLoginActiveTimeoutMinutes() != null) {
this.loginActiveTimeoutSeconds = configForm.getLoginActiveTimeoutMinutes() * 60;
+ this.loginActiveTimeoutSeconds = loginActiveTimeoutSeconds > 0 ? loginActiveTimeoutSeconds : -1;
}
if (configForm.getPasswordComplexityEnabled() != null) {
diff --git a/smart-admin-api-java8-springboot2/pom.xml b/smart-admin-api-java8-springboot2/pom.xml
index 5f2a4b4..dd21317 100644
--- a/smart-admin-api-java8-springboot2/pom.xml
+++ b/smart-admin-api-java8-springboot2/pom.xml
@@ -31,7 +31,6 @@
1.4.2
20.0
1.21
- 2.3.2
0.9.11
2.15.0
3.12.0
@@ -152,12 +151,6 @@
${user-agent-utils.version}
-
- com.github.penggle
- kaptcha
- ${kaptcha.version}
-
-
org.reflections
reflections
diff --git a/smart-admin-api-java8-springboot2/sa-base/pom.xml b/smart-admin-api-java8-springboot2/sa-base/pom.xml
index 0f76c8f..52e773e 100644
--- a/smart-admin-api-java8-springboot2/sa-base/pom.xml
+++ b/smart-admin-api-java8-springboot2/sa-base/pom.xml
@@ -163,11 +163,6 @@
guava
-
- com.github.penggle
- kaptcha
-
-
com.googlecode.concurrentlinkedhashmap
concurrentlinkedhashmap-lru
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
index 829135b..8ff1e9e 100644
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java
@@ -1,24 +1,22 @@
package net.lab1024.sa.base.module.support.captcha;
-import com.google.code.kaptcha.impl.DefaultKaptcha;
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.core.img.ImgUtil;
+import cn.hutool.core.util.RandomUtil;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.base.common.constant.StringConst;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.SystemEnvironment;
-import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.base.constant.RedisKeyConst;
import net.lab1024.sa.base.module.support.captcha.domain.CaptchaForm;
import net.lab1024.sa.base.module.support.captcha.domain.CaptchaVO;
import net.lab1024.sa.base.module.support.redis.RedisService;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.util.Base64Utils;
import javax.annotation.Resource;
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
+import java.awt.*;
import java.util.Objects;
import java.util.UUID;
@@ -29,7 +27,7 @@ import java.util.UUID;
* @Date 2021/8/31 20:52
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
@Slf4j
@Service
@@ -40,9 +38,6 @@ public class CaptchaService {
*/
private static final long EXPIRE_SECOND = 65L;
- @Resource
- private DefaultKaptcha defaultKaptcha;
-
@Resource
private SystemEnvironment systemEnvironment;
@@ -52,20 +47,23 @@ public class CaptchaService {
/**
* 生成图形验证码
* 默认 1 分钟有效期
- *
*/
public CaptchaVO generateCaptcha() {
- String captchaText = defaultKaptcha.createText();
- BufferedImage image = defaultKaptcha.createImage(captchaText);
- String base64Code;
- try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
- ImageIO.write(image, "jpg", os);
- base64Code = Base64Utils.encodeToString(os.toByteArray());
- } catch (Exception e) {
- log.error("generateCaptcha error:", e);
- throw new BusinessException("生成验证码错误");
- }
+ //生成四位验证码
+ String captchaText = RandomUtil.randomNumbers(4);
+
+ //定义图形验证码的长、宽、验证码位数、干扰线数量
+ LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(125, 43, 4, 80);
+
+ //设置背景颜色
+ lineCaptcha.setBackground(new Color(230, 244, 255));
+
+ //生成图片
+ Image image = lineCaptcha.createImage(captchaText);
+
+ //转为base64
+ String base64Code = ImgUtil.toBase64(image, "jpg");
/*
* 返回验证码对象
@@ -88,7 +86,6 @@ public class CaptchaService {
/**
* 校验图形验证码
- *
*/
public ResponseDTO checkCaptcha(CaptchaForm captchaForm) {
if (StringUtils.isBlank(captchaForm.getCaptchaUuid()) || StringUtils.isBlank(captchaForm.getCaptchaCode())) {
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java
deleted file mode 100644
index c8bfa30..0000000
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaColor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.common.collect.Lists;
-
-import java.awt.*;
-import java.util.List;
-import java.util.Random;
-
-/**
- * 验证码颜色
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaColor {
-
- public static Color getColor() {
-
- List colors = Lists.newArrayList();
- colors.add(new Color(0, 135, 255));
- colors.add(new Color(51, 153, 51));
- colors.add(new Color(255, 102, 102));
- colors.add(new Color(255, 153, 0));
- colors.add(new Color(153, 102, 0));
- colors.add(new Color(153, 102, 153));
- colors.add(new Color(51, 153, 153));
- colors.add(new Color(102, 102, 255));
- colors.add(new Color(0, 102, 204));
- colors.add(new Color(204, 51, 51));
- colors.add(new Color(128, 153, 65));
- Random random = new Random();
- int colorIndex = random.nextInt(10);
- return colors.get(colorIndex);
- }
-}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java
deleted file mode 100644
index 3016f3a..0000000
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaConfig.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.impl.DefaultKaptcha;
-import com.google.code.kaptcha.util.Config;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.Properties;
-
-/**
- * 验证码配置
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-@Configuration
-public class CaptchaConfig {
-
- @Bean
- public DefaultKaptcha getDefaultKaptcha() {
- DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
- Properties properties = new Properties();
- properties.setProperty("kaptcha.border", "no");
- properties.setProperty("kaptcha.border.color", "34,114,200");
- properties.setProperty("kaptcha.image.width", "125");
- properties.setProperty("kaptcha.image.height", "45");
- properties.setProperty("kaptcha.textproducer.char.string", "123456789");
- properties.setProperty("kaptcha.textproducer.char.length", "4");
- properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana");
- properties.setProperty("kaptcha.textproducer.font.size", "38");
-
- properties.setProperty("kaptcha.background.clear.from", "white");
- properties.setProperty("kaptcha.background.clear.to", "white");
-
- properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName());
- properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName());
-
- Config config = new Config(properties);
- defaultKaptcha.setConfig(config);
- return defaultKaptcha;
- }
-
-}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java
deleted file mode 100644
index c915661..0000000
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaNoise.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.NoiseProducer;
-import com.google.code.kaptcha.util.Configurable;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
-/**
- * 验证码加噪处理
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaNoise extends Configurable implements NoiseProducer {
-
- public CaptchaNoise() {
- }
-
- @Override
- public void makeNoise(BufferedImage image, float factorOne, float factorTwo, float factorThree, float factorFour) {
-
- int width = image.getWidth();
- int height = image.getHeight();
- Graphics2D graph = (Graphics2D) image.getGraphics();
- graph.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
- graph.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
- Random random = new Random();
- int noiseLineNum = random.nextInt(3);
- if (noiseLineNum == 0) {
- noiseLineNum = 1;
- }
- for (int i = 0; i < noiseLineNum; i++) {
- graph.setColor(CaptchaColor.getColor());
- graph.drawLine(random.nextInt(width), random.nextInt(height), 10 + random.nextInt(20), 10 + random.nextInt(20));
- }
-
- graph.dispose();
- }
-}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java
deleted file mode 100644
index 5618be9..0000000
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/config/CaptchaWordRenderer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package net.lab1024.sa.base.module.support.captcha.config;
-
-import com.google.code.kaptcha.text.WordRenderer;
-import com.google.code.kaptcha.util.Configurable;
-
-import java.awt.*;
-import java.awt.font.FontRenderContext;
-import java.awt.font.GlyphVector;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
-/**
- * 验证码字体生成
- *
- * @Author 1024创新实验室-主任: 卓大
- * @Date 2021-09-02 20:21:10
- * @Wechat zhuoda1024
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-public class CaptchaWordRenderer extends Configurable implements WordRenderer {
-
- public CaptchaWordRenderer() {
- }
-
- @Override
- public BufferedImage renderWord(String word, int width, int height) {
- int fontSize = this.getConfig().getTextProducerFontSize();
- Font[] fonts = this.getConfig().getTextProducerFonts(fontSize);
- int charSpace = this.getConfig().getTextProducerCharSpace();
- BufferedImage image = new BufferedImage(width, height, 2);
-
- Graphics2D g2D = image.createGraphics();
- g2D.setColor(Color.WHITE);
- RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
- g2D.setRenderingHints(hints);
- g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
-
- FontRenderContext frc = g2D.getFontRenderContext();
- Random random = new Random();
- int startPosY = (height - fontSize) / 5 + fontSize;
- char[] wordChars = word.toCharArray();
- Font[] chosenFonts = new Font[wordChars.length];
- int[] charWidths = new int[wordChars.length];
- int widthNeeded = 0;
-
- int startPosX;
- for (startPosX = 0; startPosX < wordChars.length; ++startPosX) {
- chosenFonts[startPosX] = fonts[random.nextInt(fonts.length)];
- char[] charToDraw = new char[]{wordChars[startPosX]};
- GlyphVector gv = chosenFonts[startPosX].createGlyphVector(frc, charToDraw);
- charWidths[startPosX] = (int) gv.getVisualBounds().getWidth();
- if (startPosX > 0) {
- widthNeeded += 2;
- }
-
- widthNeeded += charWidths[startPosX];
- }
-
- startPosX = (width - widthNeeded) / 2;
-
- for (int i = 0; i < wordChars.length; ++i) {
- g2D.setColor(CaptchaColor.getColor());
- g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN));
- char[] charToDraw = new char[]{wordChars[i]};
- g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY);
- startPosX = startPosX + charWidths[i] + charSpace;
- }
-
- return image;
- }
-
-}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
index 40a9afb..343b868 100644
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/securityprotect/service/Level3ProtectConfigService.java
@@ -108,7 +108,7 @@ public class Level3ProtectConfigService {
* 最低活跃时间(单位:秒),超过此时间没有操作系统就会被冻结,默认-1 代表不限制,永不冻结; 默认 30分钟
*/
public int getLoginActiveTimeoutSeconds() {
- return loginActiveTimeoutSeconds;
+ return loginActiveTimeoutSeconds > 0 ? loginActiveTimeoutSeconds : -1;
}
/**
@@ -168,6 +168,7 @@ public class Level3ProtectConfigService {
if (configForm.getLoginActiveTimeoutMinutes() != null) {
this.loginActiveTimeoutSeconds = configForm.getLoginActiveTimeoutMinutes() * 60;
+ this.loginActiveTimeoutSeconds = loginActiveTimeoutSeconds > 0 ? loginActiveTimeoutSeconds : -1;
}
if (configForm.getPasswordComplexityEnabled() != null) {
diff --git a/smart-admin-web-javascript/src/components/support/dict-select/index.vue b/smart-admin-web-javascript/src/components/support/dict-select/index.vue
index 840c441..790d4f2 100644
--- a/smart-admin-web-javascript/src/components/support/dict-select/index.vue
+++ b/smart-admin-web-javascript/src/components/support/dict-select/index.vue
@@ -81,13 +81,14 @@
if (!value) {
emit('update:value', []);
emit('change', []);
+ return;
}
if (Array.isArray(value)) {
emit('update:value', value);
emit('change', value);
} else {
- emit('update:value', [value]);
- emit('change', [value]);
+ emit('update:value', value);
+ emit('change', value);
}
}
diff --git a/smart-admin-web-javascript/src/constants/layout-const.js b/smart-admin-web-javascript/src/constants/layout-const.js
index db074a3..07c58ea 100644
--- a/smart-admin-web-javascript/src/constants/layout-const.js
+++ b/smart-admin-web-javascript/src/constants/layout-const.js
@@ -20,6 +20,10 @@ export const LAYOUT_ENUM = {
value: 'top',
desc: '顶部',
},
+ TOP_EXPAND: {
+ value: 'top-expand',
+ desc: '分组',
+ },
};
export const PAGE_TAG_ENUM = {
diff --git a/smart-admin-web-javascript/src/layout/components/header-user-space/header-setting.vue b/smart-admin-web-javascript/src/layout/components/header-user-space/header-setting.vue
index f84bd14..1601af0 100644
--- a/smart-admin-web-javascript/src/layout/components/header-user-space/header-setting.vue
+++ b/smart-admin-web-javascript/src/layout/components/header-user-space/header-setting.vue
@@ -9,7 +9,7 @@
-->
-
+
diff --git a/smart-admin-web-javascript/src/layout/components/top-expand-menu/index.vue b/smart-admin-web-javascript/src/layout/components/top-expand-menu/index.vue
new file mode 100644
index 0000000..ec9baa6
--- /dev/null
+++ b/smart-admin-web-javascript/src/layout/components/top-expand-menu/index.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
diff --git a/smart-admin-web-javascript/src/layout/components/top-expand-menu/recursion-menu.vue b/smart-admin-web-javascript/src/layout/components/top-expand-menu/recursion-menu.vue
new file mode 100644
index 0000000..419b0db
--- /dev/null
+++ b/smart-admin-web-javascript/src/layout/components/top-expand-menu/recursion-menu.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
![]()
+
{{ websiteName }}
+
{{ websiteName }}
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+ {{ item.menuName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/smart-admin-web-javascript/src/layout/components/top-expand-menu/sub-menu.vue b/smart-admin-web-javascript/src/layout/components/top-expand-menu/sub-menu.vue
new file mode 100644
index 0000000..40738d7
--- /dev/null
+++ b/smart-admin-web-javascript/src/layout/components/top-expand-menu/sub-menu.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+ {{ props.menuInfo.menuName }}
+
+
+
+
+
+
+
+ {{ item.menuName }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js b/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js
new file mode 100644
index 0000000..22e6a40
--- /dev/null
+++ b/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js
@@ -0,0 +1,11 @@
+/*
+ * 展开菜单 event bus
+ *
+ * @Author: 1024创新实验室-主任:卓大
+ * @Date: 2022-07-12 23:32:48
+ * @Wechat: zhuda1024
+ * @Email: lab1024@163.com
+ * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
+ */
+import mitt from 'mitt';
+export default mitt();
diff --git a/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-menu.vue b/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-menu.vue
new file mode 100644
index 0000000..58bae07
--- /dev/null
+++ b/smart-admin-web-javascript/src/layout/components/top-expand-menu/top-menu.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
diff --git a/smart-admin-web-javascript/src/layout/index.vue b/smart-admin-web-javascript/src/layout/index.vue
index df6b3d4..96ede82 100644
--- a/smart-admin-web-javascript/src/layout/index.vue
+++ b/smart-admin-web-javascript/src/layout/index.vue
@@ -16,11 +16,14 @@
+
+
+
diff --git a/smart-admin-web-typescript/src/components/support/dict-select/index.vue b/smart-admin-web-typescript/src/components/support/dict-select/index.vue
index d611b19..671bfa6 100644
--- a/smart-admin-web-typescript/src/components/support/dict-select/index.vue
+++ b/smart-admin-web-typescript/src/components/support/dict-select/index.vue
@@ -81,13 +81,14 @@
if (!value) {
emit('update:value', []);
emit('change', []);
+ return;
}
if (Array.isArray(value)) {
emit('update:value', value);
emit('change', value);
} else {
- emit('update:value', [value]);
- emit('change', [value]);
+ emit('update:value', value);
+ emit('change', value);
}
}
diff --git a/smart-admin-web-typescript/src/constants/layout-const.ts b/smart-admin-web-typescript/src/constants/layout-const.ts
index ffc6d0c..4d410ba 100644
--- a/smart-admin-web-typescript/src/constants/layout-const.ts
+++ b/smart-admin-web-typescript/src/constants/layout-const.ts
@@ -23,6 +23,10 @@ export const LAYOUT_ENUM: SmartEnum = {
value: 'top',
desc: '顶部',
},
+ TOP_EXPAND: {
+ value: 'top-expand',
+ desc: '分组',
+ },
};
export const PAGE_TAG_ENUM: SmartEnum = {
diff --git a/smart-admin-web-typescript/src/layout/components/top-expand-menu/index.vue b/smart-admin-web-typescript/src/layout/components/top-expand-menu/index.vue
new file mode 100644
index 0000000..45fe996
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/components/top-expand-menu/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
diff --git a/smart-admin-web-typescript/src/layout/components/top-expand-menu/recursion-menu.vue b/smart-admin-web-typescript/src/layout/components/top-expand-menu/recursion-menu.vue
new file mode 100644
index 0000000..6b2d121
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/components/top-expand-menu/recursion-menu.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
![]()
+
{{ websiteName }}
+
{{ websiteName }}
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+ {{ item.menuName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/smart-admin-web-typescript/src/layout/components/top-expand-menu/sub-menu.vue b/smart-admin-web-typescript/src/layout/components/top-expand-menu/sub-menu.vue
new file mode 100644
index 0000000..40738d7
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/components/top-expand-menu/sub-menu.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+ {{ props.menuInfo.menuName }}
+
+
+
+
+
+
+
+ {{ item.menuName }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js b/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js
new file mode 100644
index 0000000..22e6a40
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-expand-menu-mitt.js
@@ -0,0 +1,11 @@
+/*
+ * 展开菜单 event bus
+ *
+ * @Author: 1024创新实验室-主任:卓大
+ * @Date: 2022-07-12 23:32:48
+ * @Wechat: zhuda1024
+ * @Email: lab1024@163.com
+ * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
+ */
+import mitt from 'mitt';
+export default mitt();
diff --git a/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-menu.vue b/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-menu.vue
new file mode 100644
index 0000000..41f97ea
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/components/top-expand-menu/top-menu.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
diff --git a/smart-admin-web-typescript/src/layout/index.vue b/smart-admin-web-typescript/src/layout/index.vue
index a49fcf3..26885ca 100644
--- a/smart-admin-web-typescript/src/layout/index.vue
+++ b/smart-admin-web-typescript/src/layout/index.vue
@@ -14,6 +14,8 @@
+
+
@@ -21,6 +23,7 @@
import { computed } from 'vue';
import { LAYOUT_ENUM } from '/@/constants/layout-const';
import SideExpandLayout from './side-expand-layout.vue';
+ import TopExpandLayout from './top-expand-layout.vue';
import SideLayout from './side-layout.vue';
import TopLayout from './top-layout.vue';
import { useAppConfigStore } from '/@/store/modules/system/app-config';
diff --git a/smart-admin-web-typescript/src/layout/top-expand-layout.vue b/smart-admin-web-typescript/src/layout/top-expand-layout.vue
new file mode 100644
index 0000000..b7282dc
--- /dev/null
+++ b/smart-admin-web-typescript/src/layout/top-expand-layout.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+