fix(sso): rename lineCaptchaBean to lineCaptcha

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
liulujian 2026-04-15 15:30:14 +08:00
parent 3fa6747c10
commit 1b8168ba10

View File

@ -1,12 +1,22 @@
package com.css.txw.sso.service.verify;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ICaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.util.IdUtil;
import com.css.ggzc.framework.common.pojo.CommonResult;
import com.css.txw.sso.properties.SsoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@ -17,6 +27,16 @@ public class VerifyServiceImpl implements VerifyService {
private StringRedisTemplate stringRedisTemplate;
@Resource
private SsoProperties ssoProperties;
@Resource
private ICaptcha lineCaptcha;
@Bean
public ICaptcha lineCaptcha() {
RandomGenerator randomGenerator = new RandomGenerator("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 4);
cn.hutool.captcha.CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(120, 40, 4, 20);
captcha.setGenerator(randomGenerator);
return captcha;
}
@Override
public CommonResult<String> getVerifyToken(String remoteId) {
@ -38,4 +58,51 @@ public class VerifyServiceImpl implements VerifyService {
String VERIFY_TOKEN = "verify_token:%s";
return String.format(VERIFY_TOKEN, verifyToken);
}
@Override
public CommonResult<Map<String, String>> getCaptcha(String remoteId) {
String code = lineCaptcha.getCode();
String uuid = IdUtil.fastSimpleUUID();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(lineCaptcha.getImage(), "png", baos);
} catch (IOException e) {
throw new RuntimeException("生成验证码图片失败", e);
}
String imageBase64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(baos.toByteArray());
stringRedisTemplate.opsForValue().set(
formatCaptchaKey(uuid),
code.toLowerCase(),
5,
TimeUnit.MINUTES
);
Map<String, String> result = new HashMap<>();
result.put("uuid", uuid);
result.put("imageBase64", imageBase64);
return CommonResult.success(result);
}
@Override
public Boolean checkCaptcha(String uuid, String code) {
if (!this.ssoProperties.isLoginCaptcha()) {
return true;
}
if (org.springframework.util.StringUtils.isBlank(uuid) || org.springframework.util.StringUtils.isBlank(code)) {
return false;
}
String key = formatCaptchaKey(uuid);
String cachedCode = stringRedisTemplate.opsForValue().get(key);
if (cachedCode == null) {
return false;
}
stringRedisTemplate.delete(key);
return cachedCode.equalsIgnoreCase(code);
}
private static String formatCaptchaKey(String uuid) {
return "captcha:" + uuid;
}
}