登录增加限流控制

This commit is contained in:
none
2023-03-10 14:24:36 +08:00
parent f9dec16760
commit 81870bd802
7 changed files with 88 additions and 5 deletions

View File

@@ -9,6 +9,7 @@ import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import xyz.playedu.api.exception.LimitException;
import xyz.playedu.api.exception.NotFoundException;
import xyz.playedu.api.exception.ServiceException;
import xyz.playedu.api.types.JsonResponse;
@@ -66,4 +67,9 @@ public class ExceptionController {
return JsonResponse.error(e.getMessage(), 404);
}
@ExceptionHandler(LimitException.class)
public JsonResponse serviceExceptionHandler(LimitException e) {
return JsonResponse.error("请稍后再试", 429);
}
}

View File

@@ -7,9 +7,11 @@ 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 xyz.playedu.api.caches.UserLoginCache;
import xyz.playedu.api.constant.SystemConstant;
import xyz.playedu.api.domain.User;
import xyz.playedu.api.event.UserLoginEvent;
import xyz.playedu.api.exception.LimitException;
import xyz.playedu.api.request.frontend.LoginPasswordRequest;
import xyz.playedu.api.service.JWTService;
import xyz.playedu.api.service.UserService;
@@ -39,9 +41,15 @@ public class LoginController {
@Autowired
private ApplicationContext ctx;
@Autowired
private UserLoginCache userLoginCache;
@PostMapping("/password")
public JsonResponse password(@RequestBody @Validated LoginPasswordRequest req) {
User user = userService.find(req.getEmail());
public JsonResponse password(@RequestBody @Validated LoginPasswordRequest req) throws LimitException {
String email = req.getEmail();
userLoginCache.check(email);
User user = userService.find(email);
if (user == null) {
return JsonResponse.error("邮箱未注册");
}
@@ -55,7 +63,7 @@ public class LoginController {
data.put("token", token.getToken());
data.put("expired", token.getExpire());
ctx.publishEvent(new UserLoginEvent(this, user.getId(), new Date(), token.getToken(), IpUtil.getIpAddress(), RequestUtil.ua()));
ctx.publishEvent(new UserLoginEvent(this, user.getId(), user.getEmail(), new Date(), token.getToken(), IpUtil.getIpAddress(), RequestUtil.ua()));
return JsonResponse.data(data);
}