Go Revel - Interceptors(拦截器)
`interceptor`拦截器是revel框架在执行一个`action`的前后所调用的函数。他允许以AOP方式进行开发,这种模式非常有用:
1、记录请求日志
2、错误处理
3、状态保持
在revel中,可以使用两种形式的拦截器:
1、函数拦截器:
一个满足`InterceptorFunc`接口的函数,它不会访问任何一个特定的`controller`调用;可以被应用到任意/所有的`controller`上
2、方法拦截器:
一个无参且返回`revel.Result`类型的`controller`方法,它只会拦截已绑定的`controller`;可以随意的修改调用的`controller`
拦截器按它们的添加顺序执行。
##拦截时间
拦截器可以注册并运行在一个请求的四种生命周期:
1、`BEFORE`: 请求被路由之后,session、flash与参数已经被正确的解码,但是还没有调用`action`
2、`AFTER`: 一个请求已经返回`Result`对象, 但是还没用应用这个`Result`,即执行`action`之后。如果`action`发生`panic`,则这些拦截器不会被调用
3、`PANIC`: 在`action`发生`panic`后,或者处理`Result`时抛出异常
4、`FINALLY`: `action`被成功执行并且`Result`被正确处理之后
##Results返回值
拦截器通常返回`nil`,这种请跨下,拦截器将会继续往下执行。
各时段调用拦截器返回非空`revel.Result`时所产生的效果:
1、`BEFORE`: 不会再执行任何拦截器,包括action
2、`AFTER`: 所有的拦截器将会继续运行
3、`PANIC`: 所有的拦截器将会继续运行
4、`FINALLY`: 所有的拦截器将会继续运行
在所有情况下,任何`Result`返回值都将会代替现有的`Result`
然而,在`BEFORE`阶段,`Result` 返回值为最终的`Result`, 而在`AFTER`阶段,拦截器可能会生成自己的`Result`
##示例
**函数拦截器**
下面演示了如何定义并注册一个函数拦截器:
func (c Hotels) checkUser() revel.Result {
if user := connected(c); user == nil {
c.Flash.Error("Please log in first")
return c.Redirect(App.Index)
}
return nil
}
func init() {
revel.InterceptMethod(Hotels.checkUser, revel.BEFORE)
}
**方法拦截器**
一个方法拦截器必需符合下面两种形式的签名:
func (c AppController) example() revel.Result
func (c *AppController) example() revel.Result
下面演示了只针对controller操作的拦截器:
func checkUser(c *revel.Controller) revel.Result {
if user := connected(c); user == nil {
c.Flash.Error("Please log in first")
return c.Redirect(App.Index)
}
return nil
}
func init() {
revel.InterceptFunc(checkUser, revel.BEFORE, &Hotels{})
}
Go Revel - Interceptors(拦截器)的更多相关文章
- (vue.js)axios interceptors 拦截器中添加headers 属性
(vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...
- flume1.8 Interceptors拦截器(五)
1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...
- springMVC之mvc:interceptors拦截器的用法
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- angular之interceptors拦截器
<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UT ...
- springMVC <mvc:interceptors>拦截器的使用
首先在springMVC.xml配置如下代码 <!-- 拦截器 --> <mvc:interceptors> <bean class="com.base.Acc ...
- angular http interceptors 拦截器使用分享
拦截器 在开始创建拦截器之前,一定要了解 $q和延期承诺api 出于全局错误处理,身份验证或请求的任何同步或异步预处理或响应的后处理目的,希望能够在将请求移交给服务器之前拦截请求,并在将请求移交给服务 ...
- Interceptors - 拦截器
1.概述 Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的. 拦截器需要实现org.apache.flume.interceptor.Intercep ...
- vue interceptors(拦截器)
拦截器 顾名思义: 就是半路个您劫持, 拦截器 其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西, 这时候 vue 中应用中axios的 interceptors ...
- vue拦截器Vue.http.interceptors.push
刚开始学vue,github上down了一个开源项目,看源代码的时候看到了这个地方: /** * @export * @param {any} request * @param {any} next ...
- SpringMVC配置拦截器实现登录控制
SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断.之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面. <c:if tes ...
随机推荐
- @property与@synthesize的差别
上一篇文章我有讲到self.与_的差别,往往和这个问题相伴随的是我困惑的问题是"@property与@synthesize的差别" @property的使用方法 @interfac ...
- Mapped Statements collection does not contain value for com.xxxx.dao.impl.AreaDAOImpl.findByCode
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Persiste ...
- springmvc 自定义注解
1. 自定义一个注解 @Documented //文档生成时,该注解将被包含在javadoc中,可去掉 @Target(ElementType.METHOD)//目标是方法 @Retention(Re ...
- Activity 变成对话框,然后再隐藏?
由于继续需要做一些无感操控的工作,之前也记录了下利用悬浮窗的方法.今天突然发现原来activity可以直接嗯嗯嗯啊. 首先我在AndroidManifest里给activity添加了如下一行: and ...
- Java 8 – Convert Map to LIST
Java 8 – Convert Map to LIST Few Java examples to convert a Map to a List Map<String, String> ...
- 正则和xpath在网页中匹配字段的效率比较
1. 测试页面是 https://www.hao123.com/,这个是百度的导航 2. 为了避免网络请求带来的差异,我们把网页下载下来,命名为html,不粘贴其代码. 3.测试办法: 我们在页面中 ...
- C#基础第八天-作业答案-设计类-面向对象方式实现两个帐户之间转账
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
转自 http://www.cnblogs.com/gnielee/archive/2010/05/10/wpf4-ribbon-quick-access-toolbar.html 在Office 2 ...
- [na]ping提示&各系统默认的TTL值
1,Win7 ping 不存在的地址(请求超时) ip routing和no ip routing no ip routing----不查路由表 不配置网关---arp-catch中存在很多条目(相当 ...
- 浅谈HTML5 WebSocket的机制
回想上一章 在上一章<为什么我们须要HTML5 WebSocket>中,我简单的介绍了下WebSocket的前世今生.相信大家已对WebSocket有了初步的了解.那么今天我们继续深入学习 ...