ThinkPHP指定IP访问功能实现-限制访问IP配置方法

2025-04-19 11

在 ThinkPHP 框架中,如果你想限制某个控制器或方法只能通过指定的 IP 地址访问,你可以通过中间件或在控制器方法中进行 IP 检查来实现。以下是一个简单的实现方式:

方法一:在控制器方法中检查 IP

你可以在具体的控制器方法中手动检查客户端的 IP 地址,并根据需要进行访问控制。例如:

namespace app\index\controller;

use think\Request;

class ExampleController
{
    public function index(Request $request)
    {
        // 允许的IP地址列表
        $allowedIps = ['192.168.1.100', '123.456.78.90'];

        // 获取客户端IP地址
        $clientIp = $request->ip();

        // 检查IP地址是否允许
        if (!in_array($clientIp, $allowedIps)) {
            return 'Access denied: Your IP address is not allowed.';
        }

        // 如果IP地址允许,继续执行其他逻辑
        return 'Welcome! Your IP address is allowed.';
    }
}

方法二:使用中间件

如果你希望在多个控制器或方法中复用 IP 检查逻辑,可以考虑使用中间件。

  1. 创建中间件

    创建一个中间件类,例如 CheckIpMiddleware.php

    namespace app\http\middleware;
    
    use think\Request;
    use think\Response;
    
    class CheckIpMiddleware
    {
        public function handle(Request $request, \Closure $next)
        {
            // 允许的IP地址列表
            $allowedIps = ['192.168.1.100', '123.456.78.90'];
    
            // 获取客户端IP地址
            $clientIp = $request->ip();
    
            // 检查IP地址是否允许
            if (!in_array($clientIp, $allowedIps)) {
                return Response::create('Access denied: Your IP address is not allowed.', 'html', 403);
            }
    
            return $next($request);
        }
    }
    
  2. 注册中间件

    app/middleware.php 文件中注册你的中间件:

    return [
        // 其他中间件
        \app\http\middleware\CheckIpMiddleware::class,
    ];
    

    如果你只想在特定的路由或控制器中使用该中间件,可以在路由定义或控制器中单独应用,而不是全局注册。

  3. 在路由中应用中间件(可选)

    如果你不想全局使用,可以在路由中指定:

    use think\facade\Route;
    
    Route::get('example', 'index/ExampleController/index')->middleware(\app\http\middleware\CheckIpMiddleware::class);
    

你可以灵活地控制哪些 IP 地址可以访问你的 ThinkPHP 应用中的特定资源。选择直接在控制器中检查或使用中间件,取决于你的具体需求和代码组织方式。

Image

(www. n z w6.com)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关