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-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 @@ + + + + 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 @@ + + + + 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 @@ + + + +