Kaynağa Gözat

联通版本加上登录校验

lyhzzz 9 ay önce
ebeveyn
işleme
c7faacce45

+ 3 - 0
src/main/java/com/fdkankan/ucenter/common/RedisKeyUtil.java

@@ -18,4 +18,7 @@ public class RedisKeyUtil {
 
 
     public static final String laserCopyLock = "ucenter:laser:copy:lock:";
     public static final String laserCopyLock = "ucenter:laser:copy:lock:";
     public static String copySpaceLock =  "ucenter:scene:copy:lock:%s";
     public static String copySpaceLock =  "ucenter:scene:copy:lock:%s";
+
+    public static String loginAuthCode = "ucenter:login:auth:%s";
+    public static String checkUserCount = "ucenter:checkUser:count:%s";
 }
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/constant/LoginConstant.java

@@ -120,4 +120,7 @@ public class LoginConstant {
 
 
     public static final int FAILURE_CODE_3037 = 3037;
     public static final int FAILURE_CODE_3037 = 3037;
     public static final String FAILURE_MSG_3037 = "场景原始数据已过期,无法使用该功能!";
     public static final String FAILURE_MSG_3037 = "场景原始数据已过期,无法使用该功能!";
+
+    public static final int FAILURE_CODE_3038 = 3038;
+    public static final String FAILURE_MSG_3038 = "次数限制";
 }
 }

+ 58 - 0
src/main/java/com/fdkankan/ucenter/controller/LoginController.java

@@ -1,24 +1,35 @@
 package com.fdkankan.ucenter.controller;
 package com.fdkankan.ucenter.controller;
 
 
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.service.impl.LoginService;
 import com.fdkankan.ucenter.service.impl.LoginService;
 import com.fdkankan.ucenter.vo.request.LoginParam;
 import com.fdkankan.ucenter.vo.request.LoginParam;
 import com.fdkankan.ucenter.vo.request.RegisterParam;
 import com.fdkankan.ucenter.vo.request.RegisterParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
 
 
 /**
 /**
  * 登录
  * 登录
  */
  */
 @RestController
 @RestController
 @RequestMapping("/ucenter/sso/user")
 @RequestMapping("/ucenter/sso/user")
+@Slf4j
 public class LoginController extends BaseController {
 public class LoginController extends BaseController {
 
 
     @Autowired
     @Autowired
@@ -36,6 +47,17 @@ public class LoginController extends BaseController {
      */
      */
     @PostMapping("/login")
     @PostMapping("/login")
     public Result login(@RequestBody LoginParam param){
     public Result login(@RequestBody LoginParam param){
+        if(StringUtils.isBlank(param.getAuthCode())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        String id = request.getSession().getId();
+        if(!redisUtil.hasKey(String.format(RedisKeyUtil.loginAuthCode,id))){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+        if(!redisUtil.get(String.format(RedisKeyUtil.loginAuthCode,id)).equals(param.getAuthCode())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+
         return Result.success(loginService.login(param));
         return Result.success(loginService.login(param));
     }
     }
     /**
     /**
@@ -78,6 +100,24 @@ public class LoginController extends BaseController {
      */
      */
     @PostMapping("/checkUser")
     @PostMapping("/checkUser")
     public Result checkUser(@RequestBody LoginParam param){
     public Result checkUser(@RequestBody LoginParam param){
+        if(StringUtils.isBlank(param.getAuthCode())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        String id = request.getSession().getId();
+        if(!redisUtil.hasKey(String.format(RedisKeyUtil.loginAuthCode,id))){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+        if(!redisUtil.get(String.format(RedisKeyUtil.loginAuthCode,id)).equals(param.getAuthCode())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+//        if(redisUtil.hasKey(String.format(RedisKeyUtil.checkUserCount,id))){
+//            String countStr = redisUtil.get(String.format(RedisKeyUtil.checkUserCount, id));
+//            if(Integer.valueOf(countStr) >=5){
+//                throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+//            }
+//        }else {
+//            redisUtil.set(String.format(RedisKeyUtil.checkUserCount,id),"1",60);
+//        }
         loginService.checkUser(param.getPhoneNum(),true);
         loginService.checkUser(param.getPhoneNum(),true);
         return Result.success();
         return Result.success();
     }
     }
@@ -169,5 +209,23 @@ public class LoginController extends BaseController {
 
 
         return Result.success();
         return Result.success();
     }
     }
+
+
+
+    @GetMapping("/getLoginAuthCode")
+    public void  getLoginCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        String id = request.getSession().getId();
+        try {
+            LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100,4,60);
+            redisUtil.set(String.format(RedisKeyUtil.loginAuthCode,id),lineCaptcha.getCode(),60*5);
+            lineCaptcha.write(response.getOutputStream());
+            response.getOutputStream().close();
+        } catch (Exception e){
+            log.info("生成登录验证码错误:",e);
+        }
+
+    }
 }
 }
 
 

+ 1 - 1
src/main/java/com/fdkankan/ucenter/exception/GlobalExceptionHandler.java

@@ -21,7 +21,7 @@ public class GlobalExceptionHandler {
     @ExceptionHandler(value = Exception.class)
     @ExceptionHandler(value = Exception.class)
     public Result exceptionHandler(Exception e) throws Exception {
     public Result exceptionHandler(Exception e) throws Exception {
         log.error("服务错误:", e);
         log.error("服务错误:", e);
-        return Result.failure( 500, e.getMessage());
+        return Result.failure( 500, "系统错误");
     }
     }
 
 
     /**
     /**

+ 1 - 0
src/main/java/com/fdkankan/ucenter/vo/request/LoginParam.java

@@ -9,5 +9,6 @@ public class LoginParam {
     private String password;        //密码
     private String password;        //密码
     private Integer cameraType;
     private Integer cameraType;
     private String msgAuthCode;
     private String msgAuthCode;
+    private String authCode;
     private String clear;
     private String clear;
 }
 }