Browse Source

1、验证码新增key,以便进行校验

machaoyi 1 năm trước cách đây
mục cha
commit
00b10597e1

+ 14 - 0
application/src/main/java/com/ctsi/Auth/entity/CaptchaPO.java

@@ -0,0 +1,14 @@
+package com.ctsi.Auth.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "验证码")
+public class CaptchaPO {
+    @ApiModelProperty(value = "验证码")
+    private String captcha;
+    @ApiModelProperty(value = "验证码key")
+    private String captchaKey;
+}

+ 2 - 0
application/src/main/java/com/ctsi/Auth/entity/UserForm.java

@@ -11,6 +11,8 @@ public class UserForm {
     private String userName;
     @ApiModelProperty(value = "密码")
     private String password;
+    @ApiModelProperty(value = "验证码key")
+    private String captchaKey;
     @ApiModelProperty(value = "验证码")
     private String captcha;
     @ApiModelProperty(value = "记住我")

+ 15 - 14
application/src/main/java/com/ctsi/Auth/web/login.java

@@ -1,6 +1,7 @@
 package com.ctsi.Auth.web;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.ctsi.Auth.entity.CaptchaPO;
 import com.ctsi.Auth.entity.TokenInfoPO;
 import com.ctsi.Auth.entity.UserForm;
 import com.ctsi.Auth.entity.UserInfoPO;
@@ -24,8 +25,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.util.Base64;
 import java.util.List;
@@ -48,19 +47,18 @@ public class login {
     private static final Logger log = LoggerFactory.getLogger(login.class);
     @ApiOperation("登录")
     @PostMapping(value = "/login",name = "登录")
-    public ApiResult auth(@RequestBody UserForm userForm, HttpServletRequest request){
+    public ApiResult auth(@RequestBody UserForm userForm){
         try {
             // 验证码校验是否开启
             if (captchaType) {
-                // 从 Session 中获取之前生成的验证码
-                HttpSession session = request.getSession();
-                String storedCaptcha = (String) session.getAttribute("captcha");
-                if (storedCaptcha == null)
-                    return ApiResult.result(ErrorCodeEnum.CAPTCHA_INVALID);
-                // 从 Session 中删除验证码
-                session.removeAttribute("captcha");
+                // 从 redis 中获取之前生成的验证码
+                String captcha =(String) redisUtil.get(userForm.getCaptchaKey());
+                if (captcha == null)
+                    return ApiResult.result(ErrorCodeEnum.CAPTCHA_EXPIRED);
+                // 从 redis 中删除验证码
+                redisUtil.remove(userForm.getCaptchaKey());
                 // 比较传入的验证码和 Session 中的验证码是否相等
-                if (!storedCaptcha.equalsIgnoreCase(userForm.getCaptcha()))
+                if (!captcha.equalsIgnoreCase(userForm.getCaptcha()))
                     return ApiResult.result(ErrorCodeEnum.CAPTCHA_INVALID);
             }
             SysUser User = sysUserService.queryByUserName(userForm.getUserName());
@@ -107,7 +105,7 @@ public class login {
 
     @ApiOperation("获取验证码")
     @GetMapping("/captcha")
-    public ApiResult getCaptcha(HttpServletRequest request) {
+    public ApiResult getCaptcha() {
         try {
             String captcha = CaptchaUtil.generateRandomString();
             byte[] captchaImage = CaptchaUtil.generateCaptcha(captcha);
@@ -115,8 +113,11 @@ public class login {
             String png_base64 = encoder.encodeToString(captchaImage);;//转换成base64串
             png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");
             String uuid = UUID.randomUUID().toString();
-            redisUtil.set(uuid, captcha, 60L);
-            return ApiResult.success("data:image/jpg;base64," + png_base64);
+            redisUtil.set(uuid, captcha, 360L);
+            CaptchaPO captchaPO = new CaptchaPO();
+            captchaPO.setCaptchaKey(uuid);
+            captchaPO.setCaptcha("data:image/jpg;base64," + png_base64);
+            return ApiResult.success(captchaPO);
         } catch (IOException e) {
             e.printStackTrace();
             return ApiResult.failure("获取验证码失败",null);

+ 2 - 1
core/src/main/java/com/ctsi/Enum/ErrorCodeEnum.java

@@ -4,7 +4,8 @@ public enum ErrorCodeEnum {
     // 定义具体的错误代码和对应的描述
     USER_NOT_FOUND(1001, "用户名不存在"),
     PASSWORD_INVALID(1002, "密码错误"),
-    CAPTCHA_INVALID(1003, "验证码错误,请重新获取");
+    CAPTCHA_INVALID(1003, "验证码错误,请重新获取"),
+    CAPTCHA_EXPIRED(1004, "验证码已过期,请重新获取");
     // 可以继续添加其他错误代码
 
     // 枚举的成员变量