拦截器
编辑教程拦截器
“拦截器”是框架执行一个方法之前或之后被调用的函数。它允许 面向方面编程, 作用如下:
- 请求记录
- 错误处理
- 状态保持
在 Revel 中, 有两种形式的拦截器:
函数拦截器:请参考 InterceptorFunc 接口.
- 不能挂接到某个特定的控制器方法
- 可以应用到所有的、任意的控制器上
方法拦截器:一个不带参数、并返回一个 revel.Result的控制器方法
- 只能拦截控制器方法
- 可以修改被调用的控制器
拦截器的执行顺序与添加位置相关
拦截时间
在一个请求生命周期内,可以注册四种拦截时间:
BEFORE: | 在请求被路由到以后,并且session, flash, 参数解析之后、控制器方法被调用之前执行拦截。 |
---|---|
AFTER: | 在请求返回了一个结果, 但是结果被应用之前执行拦截。如果出现了panic,拦截不会被调用。 |
PANIC: | 在控制器方法中或应用结果时出现panic退出后被拦截。 |
FINALLY: | 在控制器方法执行完毕并且结果被应用之后被拦截。 |
结果
拦截器通常返回 nil, 在这种情况下,需要继续处理请求,不能中断。
返回一个非 nil revel.Result的效果, 取决于拦截器被调用的时间:
BEFORE | 没有进一步的拦截器被调用, 也不是一个控制器方法。 |
---|---|
AFTER | 所有拦截器仍然可以运行。 |
PANIC | 所有拦截器仍然可以运行。 |
FINALLY | 所有拦截器仍然可以运行。 |
在任何情况下,返回的结果都将附加到任何现有的结果上:
BEFORE:返回的结果是保证是最终的。
AFTER:它可能是一个进一步的拦截器,可以返回自己的结果。
例如
函数拦截器
下面是定义和注册函数拦截器的一个简单例子。
func checkUser(c *revel.Controller) revel.Result {
if user := connected(c); user == nil {
c.Flash.Error("请先登录")
return c.Redirect(App.Index)
}
return nil
}
func init() {
revel.InterceptFunc(checkUser, revel.BEFORE, &Hotels{})
}
方法拦截器
方法拦截器有两种方式的签名:
func (c AppController) example() revel.Result
func (c *AppController) example() revel.Result
下面是个同样的例子,只能拦截一个控制器。
func (c Hotels) checkUser() revel.Result {
if user := connected(c); user == nil {
c.Flash.Error("请先登录")
return c.Redirect(App.Index)
}
return nil
}
func init() {
revel.InterceptMethod(Hotels.checkUser, revel.BEFORE)
}
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟