add request helper
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Controller\AbstractController;
|
||||
use App\Middleware\AuthMiddleware;
|
||||
use App\Model\User;
|
||||
use App\Service\OperationLogService;
|
||||
use App\Utils\RequestHelper;
|
||||
use Carbon\Carbon;
|
||||
use Hyperf\HttpServer\Annotation\Controller;
|
||||
use Hyperf\HttpServer\Annotation\Middleware;
|
||||
@@ -259,7 +260,7 @@ class AuthController extends AbstractController
|
||||
target_type: 'user',
|
||||
target_id: $user->id,
|
||||
description: "用户 {$user->username} 登录",
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
@@ -644,7 +645,7 @@ class AuthController extends AbstractController
|
||||
target_type: 'user',
|
||||
target_id: $user->id,
|
||||
description: "用户 {$user->username} 修改密码",
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
@@ -687,7 +688,7 @@ class AuthController extends AbstractController
|
||||
target_type: 'user',
|
||||
target_id: $user->id,
|
||||
description: "用户 {$user->username} 退出登录",
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
// 清除 refresh token
|
||||
|
||||
@@ -9,6 +9,7 @@ use App\Middleware\AuthMiddleware;
|
||||
use App\Middleware\PermissionMiddleware;
|
||||
use App\Model\Company;
|
||||
use App\Service\OperationLogService;
|
||||
use App\Utils\RequestHelper;
|
||||
use App\Model\Platform;
|
||||
use App\Model\Store;
|
||||
use App\Model\User;
|
||||
@@ -246,7 +247,7 @@ class DataScopeController extends AbstractController
|
||||
target_id: $id,
|
||||
description: "更新用户 #{$id} 数据权限",
|
||||
detail: ['scopes' => $scopes],
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
|
||||
@@ -9,6 +9,7 @@ use App\Middleware\AuthMiddleware;
|
||||
use App\Middleware\PermissionMiddleware;
|
||||
use App\Model\Role;
|
||||
use App\Service\OperationLogService;
|
||||
use App\Utils\RequestHelper;
|
||||
use App\Model\RoleRouteOverride;
|
||||
use App\Model\Route;
|
||||
use App\Model\RouteGroup;
|
||||
@@ -180,7 +181,7 @@ class RoleController extends AbstractController
|
||||
target_id: $id,
|
||||
description: "用户 #{$id} 角色变更为 {$new_role->name}",
|
||||
detail: ['role_id' => $role_id, 'role_name' => $new_role->name],
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
|
||||
@@ -9,6 +9,7 @@ use App\Middleware\AuthMiddleware;
|
||||
use App\Middleware\PermissionMiddleware;
|
||||
use App\Model\User;
|
||||
use App\Service\OperationLogService;
|
||||
use App\Utils\RequestHelper;
|
||||
use Hyperf\HttpServer\Annotation\Controller;
|
||||
use Hyperf\HttpServer\Annotation\Middleware;
|
||||
use Hyperf\HttpServer\Annotation\RequestMapping;
|
||||
@@ -238,7 +239,7 @@ class UserController extends AbstractController
|
||||
target_id: $user->id,
|
||||
description: "创建用户 {$username}",
|
||||
detail: ['email' => $email, 'status' => $status],
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
@@ -448,7 +449,7 @@ class UserController extends AbstractController
|
||||
target_id: $user->id,
|
||||
description: "更新用户 {$user->username} 信息",
|
||||
detail: $updates,
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
@@ -537,7 +538,7 @@ class UserController extends AbstractController
|
||||
target_id: $user->id,
|
||||
description: "用户 {$user->username} 状态变更",
|
||||
detail: ['old_status' => $old_status, 'new_status' => $user->status],
|
||||
ip: OperationLogService::getRequestIp(),
|
||||
ip: RequestHelper::getClientIp($this->request),
|
||||
);
|
||||
|
||||
return [
|
||||
|
||||
@@ -6,6 +6,7 @@ namespace App\Middleware;
|
||||
|
||||
use App\Model\ApiRequestLog;
|
||||
use App\Utils\Log;
|
||||
use App\Utils\RequestHelper;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
@@ -39,7 +40,7 @@ class RequestLogMiddleware implements MiddlewareInterface
|
||||
$method = $request->getMethod();
|
||||
$path = $request->getUri()->getPath();
|
||||
$status_code = $response->getStatusCode();
|
||||
$ip = self::getClientIp($request);
|
||||
$ip = RequestHelper::getClientIp($request);
|
||||
$user_agent = $request->getHeaderLine('User-Agent') ?: null;
|
||||
|
||||
// GET/DELETE 请求不记录请求体
|
||||
@@ -130,26 +131,4 @@ class RequestLogMiddleware implements MiddlewareInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取客户端真实 IP
|
||||
*
|
||||
* 优先级:X-Forwarded-For → X-Real-IP → ServerParams remote_addr
|
||||
*/
|
||||
public static function getClientIp(ServerRequestInterface $request): ?string
|
||||
{
|
||||
// X-Forwarded-For 可能包含多个 IP,取第一个
|
||||
$forwarded_for = $request->getHeaderLine('X-Forwarded-For');
|
||||
if ($forwarded_for !== '') {
|
||||
$ips = explode(',', $forwarded_for);
|
||||
return trim($ips[0]);
|
||||
}
|
||||
|
||||
$real_ip = $request->getHeaderLine('X-Real-IP');
|
||||
if ($real_ip !== '') {
|
||||
return trim($real_ip);
|
||||
}
|
||||
|
||||
$server_params = $request->getServerParams();
|
||||
return $server_params['remote_addr'] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use App\Middleware\RequestLogMiddleware;
|
||||
use App\Model\OperationLog;
|
||||
use App\Model\User;
|
||||
use App\Utils\Log;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Qbhy\HyperfAuth\AuthManager;
|
||||
use Swoole\Coroutine;
|
||||
|
||||
@@ -48,23 +46,6 @@ class OperationLogService
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 从当前请求上下文获取客户端 IP
|
||||
*/
|
||||
public static function getRequestIp(): ?string
|
||||
{
|
||||
try {
|
||||
$container = \Hyperf\Context\ApplicationContext::getContainer();
|
||||
$request = $container->get(ServerRequestInterface::class);
|
||||
return RequestLogMiddleware::getClientIp($request);
|
||||
} catch (\Throwable $e) {
|
||||
Log::get()->warning('OperationLogService: 获取客户端 IP 失败', [
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从当前认证上下文获取用户 ID
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Utils;
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class RequestHelper
|
||||
{
|
||||
/**
|
||||
* 获取客户端真实 IP
|
||||
*
|
||||
* 优先级:X-Forwarded-For → X-Real-IP → ServerParams remote_addr
|
||||
*/
|
||||
public static function getClientIp(ServerRequestInterface $request): ?string
|
||||
{
|
||||
$forwarded_for = $request->getHeaderLine('X-Forwarded-For');
|
||||
if ($forwarded_for !== '') {
|
||||
$ips = explode(',', $forwarded_for);
|
||||
return trim($ips[0]);
|
||||
}
|
||||
|
||||
$real_ip = $request->getHeaderLine('X-Real-IP');
|
||||
if ($real_ip !== '') {
|
||||
return trim($real_ip);
|
||||
}
|
||||
|
||||
$server_params = $request->getServerParams();
|
||||
return $server_params['remote_addr'] ?? null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user