diff --git a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java index e4dff46..256660d 100644 --- a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java +++ b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java @@ -1,5 +1,8 @@ package com.techsor.datacenter.business.controller; +import cn.hutool.captcha.CaptchaUtil; +import cn.hutool.captcha.LineCaptcha; +import com.techsor.datacenter.business.service.captcha.HutoolCaptchaGenerator; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -9,7 +12,6 @@ import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import com.google.code.kaptcha.impl.DefaultKaptcha; import com.techsor.datacenter.business.common.response.SimpleDataResponse; import com.techsor.datacenter.business.configurator.interceptor.AccessRequired; import com.techsor.datacenter.business.dto.account.CacheUserData; @@ -19,6 +21,7 @@ import com.techsor.datacenter.business.service.AccountService; import com.techsor.datacenter.business.service.captcha.CaptchaService; import com.techsor.datacenter.business.service.captcha.CaptchaVO; +import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -39,8 +42,6 @@ public class AccountController { @Autowired private AccountService accountService; - @Autowired - private DefaultKaptcha producer; @Autowired private CaptchaService captchaService; @@ -52,7 +53,6 @@ public class AccountController { * @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese) * @param request the HttpServletRequest object * @param response the HttpServletResponse object - * @param device the device object * @return a SimpleDataResponse containing the cached user data */ @Operation(summary = "User Login") @@ -174,15 +174,16 @@ public class AccountController { @Operation(summary = "Retrieve Login Captcha") @RequestMapping(value = "/getCaptcha", method = RequestMethod.GET) public SimpleDataResponse getCaptcha() throws IOException { - // Generate text captcha - String content = producer.createText(); - // Generate image captcha - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - BufferedImage image = producer.createImage(content); - ImageIO.write(image, "jpg", outputStream); + // 使用 Hutool 创建一个验证码 + LineCaptcha captcha = CaptchaUtil.createLineCaptcha(110, 40, 4, 5); + captcha.setFont(new Font("微软雅黑", Font.BOLD, 32)); + captcha.setGenerator(new HutoolCaptchaGenerator()); + // 重新生成验证码内容(因为 setGenerator() 之后要刷新) + captcha.createCode(); + String content = captcha.getCode(); // 获取验证码文本 // Encode byte array to Base64 String str = "data:image/jpeg;base64,"; - String base64Img = str + Base64.encodeBase64String(outputStream.toByteArray()) + String base64Img = str + captcha.getImageBase64() .replace("\n", "") .replace("\r", ""); // Cache captcha and prepare response diff --git a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java index 4bb1916..e24dc61 100644 --- a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java +++ b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java @@ -1,32 +1,17 @@ package com.techsor.datacenter.business.controller; -import com.google.code.kaptcha.impl.DefaultKaptcha; import com.techsor.datacenter.business.common.response.SimpleDataResponse; -import com.techsor.datacenter.business.configurator.interceptor.AccessRequired; -import com.techsor.datacenter.business.dao.ex.CompanyMapperExt; import com.techsor.datacenter.business.dto.account.CacheUserData; -import com.techsor.datacenter.business.dto.account.LoginParam; -import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextParams; import com.techsor.datacenter.business.dto.openapi.OpenApiAddMultiAlarmParams; -import com.techsor.datacenter.business.service.AccountService; -import com.techsor.datacenter.business.service.captcha.CaptchaService; -import com.techsor.datacenter.business.service.captcha.CaptchaVO; import com.techsor.datacenter.business.service.impl.OpenApiServiceImpl; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.util.List; /** diff --git a/data-center-business-service/pom.xml b/data-center-business-service/pom.xml index b42f679..6c6fbb1 100644 --- a/data-center-business-service/pom.xml +++ b/data-center-business-service/pom.xml @@ -56,11 +56,12 @@ s3 - - com.github.penggle - kaptcha - 2.3.2 - + + + cn.hutool + hutool-captcha + 5.8.41 + org.junit.vintage junit-vintage-engine diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/OpenApiService.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/OpenApiService.java index cd52f80..dcc19fe 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/OpenApiService.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/OpenApiService.java @@ -1,15 +1,8 @@ package com.techsor.datacenter.business.service; -import com.alibaba.fastjson.JSONObject; import com.techsor.datacenter.business.common.response.SimpleDataResponse; -import com.techsor.datacenter.business.dto.account.LoginParam; -import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextParams; import com.techsor.datacenter.business.dto.openapi.OpenApiAddMultiAlarmParams; -import com.techsor.datacenter.business.model.DeviceAlertConfig; -import com.techsor.datacenter.business.model.DeviceInfo; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.List; /** diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/HutoolCaptchaGenerator.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/HutoolCaptchaGenerator.java new file mode 100644 index 0000000..a96ff54 --- /dev/null +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/HutoolCaptchaGenerator.java @@ -0,0 +1,27 @@ +package com.techsor.datacenter.business.service.captcha; + +import cn.hutool.captcha.generator.CodeGenerator; + +public class HutoolCaptchaGenerator implements CodeGenerator { + + private int length = 4; + private static final String chars = "23456789abcdefghkmnpqrstuvwxyzABCDEFGHKMNPRSTUVWXYZ"; + + @Override + public String generate() { + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + int idx = (int) (Math.random() * chars.length()); + sb.append(chars.charAt(idx)); + } + return sb.toString(); + } + + @Override + public boolean verify(String code, String userInput) { + if (code == null || userInput == null) { + return false; + } + return code.equalsIgnoreCase(userInput); + } +} \ No newline at end of file diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/KaptchaConfig.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/KaptchaConfig.java deleted file mode 100644 index 91e8595..0000000 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/KaptchaConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.techsor.datacenter.business.service.captcha; - -import java.util.Properties; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.google.code.kaptcha.impl.DefaultKaptcha; -import com.google.code.kaptcha.util.Config; - -@Configuration -public class KaptchaConfig { - @Bean - public DefaultKaptcha producer(){ - - DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); - Properties properties = new Properties(); - properties.setProperty("kaptcha.border", "no"); - properties.setProperty("kaptcha.border.color", "105,179,90"); - properties.setProperty("kaptcha.textproducer.font.color", "black"); - properties.setProperty("kaptcha.image.width", "110"); - properties.setProperty("kaptcha.image.height", "40"); - properties.setProperty("kaptcha.textproducer.char.string","23456789abcdefghkmnpqrstuvwxyzABCDEFGHKMNPRSTUVWXYZ"); - properties.setProperty("kaptcha.textproducer.font.size", "30"); - properties.setProperty("kaptcha.textproducer.char.space","3"); - properties.setProperty("kaptcha.session.key", "code"); - properties.setProperty("kaptcha.textproducer.char.length", "4"); - properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑"); -// properties.setProperty("kaptcha.obscurificator.impl","com.xxx");可以重写实现类 - properties.setProperty("kaptcha.noise.impl","com.google.code.kaptcha.impl.NoNoise"); - Config config = new Config(properties); - defaultKaptcha.setConfig(config); - - return defaultKaptcha; - } -} \ No newline at end of file diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/GatewayClientsServiceImpl.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/GatewayClientsServiceImpl.java index 46f190b..a538a9f 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/GatewayClientsServiceImpl.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/GatewayClientsServiceImpl.java @@ -46,7 +46,6 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.ObjectUtils; import jakarta.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.HashMap; import java.util.List; diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/OpenApiServiceImpl.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/OpenApiServiceImpl.java index 494d8b4..387864f 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/OpenApiServiceImpl.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/OpenApiServiceImpl.java @@ -1,40 +1,20 @@ package com.techsor.datacenter.business.service.impl; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; -import com.techsor.datacenter.business.common.Constants; -import com.techsor.datacenter.business.common.exception.MsgCodeException; import com.techsor.datacenter.business.common.language.msg.MsgLanguageChange; -import com.techsor.datacenter.business.common.language.msg.Msg_JP; import com.techsor.datacenter.business.common.response.ResponseCode; import com.techsor.datacenter.business.common.response.SimpleDataResponse; import com.techsor.datacenter.business.dao.ex.*; -import com.techsor.datacenter.business.dto.account.CacheUserData; -import com.techsor.datacenter.business.dto.account.LoginParam; -import com.techsor.datacenter.business.dto.device.DeviceTemplateParams; import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextParams; import com.techsor.datacenter.business.dto.openapi.OpenApiAddMultiAlarmParams; import com.techsor.datacenter.business.model.*; -import com.techsor.datacenter.business.service.AccountService; import com.techsor.datacenter.business.service.OpenApiService; -import com.techsor.datacenter.business.util.*; -import com.techsor.datacenter.business.util.redis.RedisUtil; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.text.MessageFormat; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 开放接口ServiceImpl diff --git a/pom.xml b/pom.xml index 8bf07df..6be9c20 100644 --- a/pom.xml +++ b/pom.xml @@ -153,7 +153,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.5.0 + 2.8.14