You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
48 lines
1.3 KiB
<?php
|
|
|
|
namespace app\home\middleware;
|
|
|
|
use app\home\service\BaseHomeService;
|
|
use think\facade\Cache;
|
|
use think\facade\Config;
|
|
use think\Request;
|
|
|
|
/**
|
|
* @desc 重复操作 单个ip 单个路径
|
|
*/
|
|
class RepeatOperateMiddleware
|
|
{
|
|
|
|
public function handle(Request $request, \Closure $next)
|
|
{
|
|
|
|
// OPTIONS 请求直接返回空响应
|
|
if ($request->method(true) === 'OPTIONS') {
|
|
return response()->send();
|
|
}
|
|
|
|
$header = $request->header();
|
|
if(!isset($header['language'])){
|
|
$request->lang=Config::get('lang.default_lang');
|
|
}else{
|
|
$lang_list=Config::get('lang.allow_lang_list');
|
|
$lang=strtolower($header['language']);
|
|
if(in_array($lang,$lang_list)){
|
|
$request->lang=$lang;
|
|
}else{
|
|
$request->lang=Config::get('lang.default_lang');
|
|
}
|
|
}
|
|
//echo $request->lang;
|
|
$ip = (new BaseHomeService())->getClientRealIp();
|
|
$url = $request->url();
|
|
$key = 'REPEAT_OPERATE_'.$url.'_'.$ip;
|
|
if(Cache::store('redis')->has($key)){
|
|
return json(['code' => '100403', 'message' => 'repeated','data' => []]);
|
|
}
|
|
|
|
//Cache::store('redis')->set($key, 1, 2);
|
|
return $next($request);
|
|
|
|
}
|
|
}
|