RateLimiting.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace app\admin\middleware;
  3. use app\common\traits\JumpTrait;
  4. use app\Request;
  5. use Closure;
  6. use Wolfcode\RateLimiting\Bootstrap;
  7. class RateLimiting
  8. {
  9. use JumpTrait;
  10. /**
  11. * 启用限流器需要开启Redis
  12. * @param Request $request
  13. * @param Closure $next
  14. * @return mixed
  15. */
  16. public function handle(Request $request, Closure $next): mixed
  17. {
  18. // 是否启用限流器
  19. if (!env('RATE_LIMITING_STATUS', false)) return $next($request);
  20. if ($request->method() == 'GET') return $next($request);
  21. $controller = $request->controller();
  22. $module = app('http')->getName();
  23. $appNamespace = config('app.app_namespace');
  24. $controllerClass = "app\\{$module}\\controller\\{$controller}{$appNamespace}";
  25. $controllerClass = str_replace('.', '\\', $controllerClass);
  26. $action = $request->action();
  27. try {
  28. Bootstrap::init($controllerClass, $action, [
  29. # Redis 相关配置
  30. 'host' => env('REDIS_HOST', '127.0.0.1'),
  31. 'port' => (int)env('REDIS_PORT', 6379),
  32. 'password' => env('REDIS_PASSWORD', ''),
  33. 'prefix' => env('REDIS_PREFIX', ''),
  34. 'database' => (int)env('REDIS_DATABASE', 0),
  35. ]);
  36. }catch (\Throwable $exception) {
  37. $this->error($exception->getMessage());
  38. }
  39. return $next($request);
  40. }
  41. }