Browse Source

验证码问题

zhc
review512jwy@163.com 1 week ago
parent
commit
84b040ec4d
  1. 23
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java
  2. 15
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java
  3. 7
      data-center-business-service/pom.xml
  4. 7
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/OpenApiService.java
  5. 27
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/HutoolCaptchaGenerator.java
  6. 36
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/KaptchaConfig.java
  7. 1
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/GatewayClientsServiceImpl.java
  8. 20
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/OpenApiServiceImpl.java
  9. 2
      pom.xml

23
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;
@ -40,8 +43,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<CaptchaVO> 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

15
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;
/**

7
data-center-business-service/pom.xml

@ -56,10 +56,11 @@
<artifactId>s3</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-captcha -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>5.8.41</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>

7
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;
/**

27
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);
}
}

36
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/captcha/KaptchaConfig.java

@ -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;
}
}

1
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;

20
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

2
pom.xml

@ -153,7 +153,7 @@
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.5.0</version>
<version>2.8.14</version>
</dependency>

Loading…
Cancel
Save