根据条件来加载中间件
浏览:2071次 出处信息
我们介绍了数个中间件组件,这些中的一部分是非常有效的所以我们要激活他为全局的。但其它的一些最好只是当我们确认的时候才激活,今天我们就要讲这个的解决方案。
根据条件来加载中间件
条件在中间件中是超级中间件,这些中间件需要和一些运行的条件一起,才会被启用。让我们看看一些例子:
- 你只想在 /public 中想激活 JSONP 中间件
- 你不想在你本地的 ip 中激活 Basic Auth
我认真的研究了 WSGI 和 Rack ,但没发现很好的这种解决方案,他们大多只是单个组件有这个功能。我没有见到很 cool 的功能。
Middleware::Conditional
这是一个 Conditional 中间件是最终的灵活的解决方法:
use Plack::Builder; builder { enable_if { $_[0]->{REMOTE_ADDR} !~ /^192\.168\.0\./ } "Auth::Basic", authenticator => ...; $app; };
这添加了一个新的 enable_if 的关键字到 Plack::Builder ,这需要一个获取运行时请求中的信息做为评估,如果这个块的返回是真 ($_[0] 是 $env 的环境变量中的hash)。
这个例子的代码检查这个来自本地的请求和认证过的请求。
Conditiona 是作为一个众多中间件之一,这相当于:
use Plack::Middleware::Conditional; use Plack::Middleware::Auth::Basic; my $app = sub { ... }; $app = Plack::Middleware::Conditional->wrap($app, builder => sub { Plack::Middleware::Auth::Basic->wrap( $_[0], authenticator => ..., ); }, condition => sub { my $env = shift; $env->{REMOTE_ADDR} !~ /^192\.168\.0\./; }, );
但这只是一个无聊的的写法,所以建议使用 DSL 的版本,这是我所推荐你使用的
这是我的译文,原文:http://advent.plackperl.org/2009/12/day-18-load-middleware-conditionally.html
建议继续学习:
- 中间件和稳定性平台 (阅读:6500)
- Apache Avro 与 Thrift 比较 (阅读:5137)
- 国内互联网公司数据库访问层调查 (阅读:3779)
- 2012年数据库技术大会 百度和淘宝介绍的中间件对比 (阅读:3672)
- 在你的应用中添加 JSONP 的支持 (阅读:2681)
- 通过中间件来实现应用的认证 (阅读:2184)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:应用中的静态文件 >>
文章信息
- 作者:扶凯 来源: 扶凯
- 标签: 中间件
- 发布时间:2011-08-19 23:09:48
建议继续学习
近3天十大热文
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 全站换域名时利用nginx和javascri -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南
