博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go Web开发之Revel - 拦截器
阅读量:5257 次
发布时间:2019-06-14

本文共 1555 字,大约阅读时间需要 5 分钟。

一个拦截器是一个框架在调用action方法前或后调用的函数. 它允许一种的形式, 它经常被用于做下面几种事情:

  • Request logging
  • Error handling
  • Stats keeping

在Revel里, 一个拦截器能接受两种形式:

1. 函数拦截器: 一个函数满足  接口

  • 没有访问特定的应用程序Controller被调用
  • 在应用程序中可以应用于任意或全部Controller

2. 方法拦截器:一个controller的方法接受没有参数和rev.Result的返回值

  • 可以只拦截受约束的Controller
  • 可以修改被调用的controller作为想得到的

拦截器按照被添加的顺序被调用.

拦截器次数

一个拦截器能在请求生命周期被注册并在4个点运行:

  1. BEFORE: 在请求被路由, session,flash和参数反编码后, 但在action被调用前
  2. AFTTER: 在请求已经返回一个Result后, 但在Result被应用之前. 如果aciton产生panic这些拦截器将不会被调用
  3. PANIC: 一个panic退出一个action或提出应用返回Result后
  4. FINALLY: 在一个action完成和Result被应用后

结果

拦截器典型的返回nil, 在这种情况下请求不用拦截器并继续处理.

返回非nil的效果 rev.Result依赖拦截器的调用.

  1. BEFORE: 没有更深远的拦截器被调用, action也没有
  2. AFTTER: 全部的拦截器都在运行
  3. PANIC: 全部的拦截器都在运行
  4. FINALLY: 全部的拦截器都在运行

在所有情况下, 任何返回的Result将代替任何目前的Result.

在BEFORE情况下, 无论如何, 返回的结果保证是最终结果, 当在AFTER情况下, 它可能是一个更进一步的拦截器可以发出它自己的Result.

例子
函数拦截器

 这里有一个简单的示例定义和注册一个函数拦截器.

func checkUser(c *rev.Controller) rev.Result {    if user := connected(c); user == nil {        c.Flash.Error("Please log in first")        return c.Redirect(Application.Index)    }    return nil}func init() {    rev.InterceptFunc(checkUser, rev.BEFORE, &Hotels{})}

方法拦截器

一个方法拦截器签名可以是两种形式中的一个:

func (c AppController) example() rev.Resultfunc (c *AppController) example() rev.Result

这是个相同的示例它只操作应用程序的controller

func (c Hotels) checkUser() rev.Result {    if user := connected(c); user == nil {        c.Flash.Error("Please log in first")        return c.Redirect(Application.Index)    }    return nil}func init() {    rev.InterceptMethod(checkUser, rev.BEFORE)}

 

至此结束

转载于:https://www.cnblogs.com/ztiandan/archive/2013/01/07/2845962.html

你可能感兴趣的文章
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
条件断点 符号断点
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
关于收费软件
查看>>
javascript之Style物
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
原生HttpClient详细使用示例
查看>>
Factory Design Pattern
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
3.PHP 教程_PHP 语法
查看>>