“拦截器”是框架执行一个方法之前或之后被调用的函数。它允许 面向方面编程, 作用如下:
在 Revel 中, 有两种形式的拦截器:
函数拦截器:请参考 InterceptorFunc
接口.
方法拦截器:一个不带参数、并返回一个 revel.Result
的控制器方法
拦截器的执行顺序与添加位置相关
在一个请求生命周期内,可以注册四种拦截时间:
拦截器通常返回 nil
, 在这种情况下,需要继续处理请求,不能中断。
返回一个非 nil
revel.Result
的效果, 取决于拦截器被调用的时间:
在任何情况下,返回的结果都将附加到任何现有的结果上:
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)
}
使用空白中间件替换默认中间件app := iris.New()替换为app := iris.Default()使用中间件package mainimport ("github.com/katara...
前端代码!DOCTYPE htmlhtml lang="en"headmeta charset="UTF-8"meta http-equiv="X-UA-Compatible" content="IE=edge"meta name=...
一个非阻塞的单线程HTTP服务器。典型的应用程序与HTTPServer类几乎没有直接交互,除了在进程开始时启动服务器(甚至通常通过to...
到目前为止,您一直在使用常见的数据类型,如:intfloatstrbool但是您也可以使用更复杂的数据类型。您仍然会拥有现在已经看到的相...
缓存的其他问题是数据的隐私和数据应该存储在缓存的级联中的问题。用户通常面临两种缓存:他们自己的浏览器缓存(私有缓存)和他...
Java Swing教程 -Java Swing SpringLayoutjavax.swing包中的SpringLayout类的实例表示一个SpringLayout管理器。在SpringLayout管...
二、运行springboot-freemarker 工程git clone 下载工程springboot-learning-example ,项目地址见 GitHub –https://github.com...
说明:继承自AbstractWrapper,自身的内部属性entity也用于生成where条件及LambdaQueryWrapper,可以通过ne...