12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- /**
- * +----------------------------------------------------------------------
- * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- * +----------------------------------------------------------------------
- * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
- * +----------------------------------------------------------------------
- * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- * +----------------------------------------------------------------------
- * | Author: CRMEB Team <admin@crmeb.com>
- * +----------------------------------------------------------------------
- */
- namespace app\api\middleware;
- use app\Request;
- use crmeb\exceptions\ApiException;
- use crmeb\interfaces\MiddlewareInterface;
- use crmeb\services\CacheService;
- use think\facade\Config;
- /**
- * Redis锁
- * Class BlockerMiddleware
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/2/8
- * @package app\api\middleware
- */
- class BlockerMiddleware implements MiddlewareInterface
- {
- /**
- * @param Request $request
- * @param \Closure $next
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2022/11/21
- */
- public function handle(Request $request, \Closure $next)
- {
- if (Config::get('cache.default') == 'file') {
- return $next($request);
- }
- $uid = $request->uid();
- $key = md5($request->rule()->getRule() . $uid);
- if (!CacheService::setMutex($key)) {
- throw new ApiException('请求太过频繁,请稍后再试');
- }
- $response = $next($request);
- $this->after($response, $key);
- return $response;
- }
- /**
- * @param $response
- * @param $key
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2022/11/22
- */
- public function after($response, $key)
- {
- CacheService::delMutex($key);
- }
- }
|