环境说明

windows10
laravel 5.2
php 5.6.15
apache 2.4.17
Homestead v2.1.8

Laravel 5.2简单介绍

Laravel 5.2 在 5.1 基础上继续改进和优化:添加多认证驱动支持、隐式模型绑定、简化 Eloquent 全局作用域、可选择的认证脚手架、中间件组、访问频率限制、数组输入验证改进等等。

安装laravel 5.2

在终端通过Composer的create-project命令来安装Laravel5.2应用

middleware

middleware简介

Laravel中可以把HTTP中间件看做“装饰器”,在请求到达最终动作之前对请求进行过滤和处理。

middleware在Laravel中有着广泛的应用,比如用户认证、日志、维护模式、开启Session、从Session中获取错误信息,以及上一篇教程中提到的CSRF验证,等等。 中间件类默认存放在app/Http/Middleware目录下。

throttle的使用

在新版的laravel 5.2中,封装了一个新的middleware作用是限制APIs的访问次数,使我们的服务器不会受到无限制的攻击。使用代码如下:

如果要修改访问次数或者时间,如下:

工作原理

  1. 首先我们找到app\Http\Kernel.php文件,在这里我们会看到一个web的中间件组$middlewareGroups,里面注册了thottle的默认访问次数和时间,代码如下:

  2. 在 app/Http/Kernel.php 文件中分配给该中间件一个简写的 key,默认情况下,该类的 $routeMiddleware 属性包含了 Laravel 内置的入口中间件,添加你自己的中间件只需要将其追加到后面并为其分配一个 key:代码如下:

    这里我们可以看到,我们要学习的throttle中间件

  3. 所以我们进入到throttle中间件,可以看到我们主要的业务逻辑代码,如下:

可以看到 __construct 构造函数通过注入一个 RateLimiter 服务来实现在规定时间的访问次数的限制。

同时可以看到$maxAttempts设置访问限制次数, $decayMinutes 访问限制次数的时间,以及当访问请求时是如何响应的。

Retry-After:当限制访问时间过后,重新获取访问次数

X-RateLimit-Limit:限制访问的次数

X-RateLimit-Remaining:剩下访问次数

实例

首先我们注册一个路由,并加上throttle中间件,设置其访问次数,这里我们设置为3,如下:

然后访问主页,效果如下:

enter image description here

然后网页我们刷新3次,也就是请求了3次这个路由,当第四次在刷新的时候,就是出现Too Many Attempts. 效果图如下:

enter image description here

总结

  • laravel5.2封装了开箱即用的访问限制的middleware,使我们在设置访问限制的时候更加的方便

视频地址:https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/2

发表评论

电子邮件地址不会被公开。 必填项已用*标注