限制某些路由访问Laravel中的localhost

时间:2015-01-14 11:02:37

标签: php laravel routes

我的Laravel应用程序中的数据库是从另一个Java应用程序填充的。这两个应用程序(Java和Laravel)在同一台服务器上运行。 Java应用程序向Laravel应用程序发出带有数据的POST请求。 Laravel应用程序将发送的数据插入数据库。

问题是我无法找到验证请求的方法。我希望Laravel应用程序仅在 源来自同一服务器时接受该特定请求(例如,laravel.app/insert_data

目前,路线laravel.app/insert_data可公开访问。如何仅限于localhost,以便我不接受来自未知主机的数据。

一种方法是,我可以从请求和过滤器中获取HTTP标头。但是我假设Laravel有内置的功能来做这些事情。

2 个答案:

答案 0 :(得分:3)

你应该使用laravel过滤器。

可以这样定义:

Route::filter('localCallOnly', function()
{
    //if IPs don't match - 404
    if (Request::server('SERVER_ADDR') != Request::server('REMOTE_ADDR'))
    {
        return App::abort(404);
    }
});

后来用于你想要的任何路线:

Route::get('insert_data', array('before' => 'localCallOnly', 'uses' => 'MyController@insertData'));

基本上这意味着必须将“localCallOnly”过滤器应用于“insert_data”路由。因此,如果您的规则(相同的IP)与路由(控制器操作)不匹配,则不会执行。

答案 1 :(得分:1)

根据您的环境,我宁愿在Web服务器配置中执行此操作。在位置配置中,您可以指定类似

的内容

请注意,以下内容仅适用于比apache 2.4更新的系统。权限指定已更改

<Location '/url/here'>
Require IP 127.0.0.1
...
</Location>
然后,Apache将处理任何不是来自localhost的请求,并且出现400未授权的错误。但是,这在共享托管环境中不起作用。