diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java index 7125688..d4c6c90 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java @@ -1,17 +1,16 @@ package com.atguigu.spzx.manger.controller; import com.atguigu.spzx.manger.service.SysUserService; +import com.atguigu.spzx.manger.service.ValidateCodeService; import com.atguigu.spzx.model.dto.system.LoginDto; import com.atguigu.spzx.model.vo.result.Result; import com.atguigu.spzx.model.vo.result.ResultCodeEnum; import com.atguigu.spzx.model.vo.system.LoginVo; +import com.atguigu.spzx.model.vo.system.ValidateCodeVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Tag(name = "用户接口") @RestController @@ -19,6 +18,8 @@ import org.springframework.web.bind.annotation.RestController; public class IndexController { @Autowired private SysUserService sysUserService; + @Autowired + private ValidateCodeService validateCodeService; @Operation(summary = "登录请求", description = "登录请求实现") @PostMapping("login") @@ -26,4 +27,11 @@ public class IndexController { LoginVo vo = sysUserService.login(loginDto); return Result.success(vo, ResultCodeEnum.SUCCESS); } + + @Operation(summary = "生成验证码", description = "生成验证码信息") + @GetMapping("generateValidateCode") + public Result generateValidateCode() { + ValidateCodeVo vo = validateCodeService.generateValidateCode(); + return Result.success(vo, ResultCodeEnum.SUCCESS); + } } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/ValidateCodeService.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/ValidateCodeService.java new file mode 100644 index 0000000..d40b649 --- /dev/null +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/ValidateCodeService.java @@ -0,0 +1,12 @@ +package com.atguigu.spzx.manger.service; + +import com.atguigu.spzx.model.vo.system.ValidateCodeVo; + +public interface ValidateCodeService { + /** + * 生成验证码信息 + * + * @return 验证码响应结果实体类 + */ + ValidateCodeVo generateValidateCode(); +} diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/ValidateCodeServiceImpl.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/ValidateCodeServiceImpl.java new file mode 100644 index 0000000..d91db0d --- /dev/null +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/ValidateCodeServiceImpl.java @@ -0,0 +1,36 @@ +package com.atguigu.spzx.manger.service.impl; + +import cn.hutool.captcha.CaptchaUtil; +import cn.hutool.captcha.CircleCaptcha; +import com.atguigu.spzx.manger.service.ValidateCodeService; +import com.atguigu.spzx.model.vo.system.ValidateCodeVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +@Service +public class ValidateCodeServiceImpl implements ValidateCodeService { + @Autowired + private RedisTemplate redisTemplate; + + /** + * 生成验证码信息 + * + * @return 验证码响应结果实体类 + */ + @Override + public ValidateCodeVo generateValidateCode() { + // 1. 通过工具生成验证码 + CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2); + String code = captcha.getCode(); + String base64Image = "data:image/png;base64," + captcha.getImageBase64(); + // 2. 验证码存储到Redis中,Redis的key为UUID,值为验证码的值 + String key = UUID.randomUUID().toString(); + // 3. 返回ValidateCodeVo + redisTemplate.opsForValue().set(key, code, 1, TimeUnit.MINUTES); + return ValidateCodeVo.builder().codeKey(key).codeValue(base64Image).build(); + } +} diff --git a/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class b/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class index d23e1fa..75663be 100644 Binary files a/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class and b/spzx-manager/target/classes/com/atguigu/spzx/manger/controller/IndexController.class differ diff --git a/spzx-model/src/main/java/com/atguigu/spzx/model/vo/system/ValidateCodeVo.java b/spzx-model/src/main/java/com/atguigu/spzx/model/vo/system/ValidateCodeVo.java index 212e8ce..82b8ff5 100644 --- a/spzx-model/src/main/java/com/atguigu/spzx/model/vo/system/ValidateCodeVo.java +++ b/spzx-model/src/main/java/com/atguigu/spzx/model/vo/system/ValidateCodeVo.java @@ -1,16 +1,20 @@ package com.atguigu.spzx.model.vo.system; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor @Schema(description = "验证码响应结果实体类") public class ValidateCodeVo { - @Schema(description = "验证码key") - private String codeKey ; // 验证码的key + private String codeKey; // 验证码的key @Schema(description = "验证码value") - private String codeValue ; // 图片验证码对应的字符串数据 - + private String codeValue; // 图片验证码对应的字符串数据 } \ No newline at end of file diff --git a/spzx-model/target/classes/com/atguigu/spzx/model/vo/system/ValidateCodeVo.class b/spzx-model/target/classes/com/atguigu/spzx/model/vo/system/ValidateCodeVo.class index 8092131..3f1f02c 100644 Binary files a/spzx-model/target/classes/com/atguigu/spzx/model/vo/system/ValidateCodeVo.class and b/spzx-model/target/classes/com/atguigu/spzx/model/vo/system/ValidateCodeVo.class differ