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 ...
随机推荐
- appium简明教程(10)——控件定位基础
狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...
- 跟我学SharePoint2013视频培训课程——设置列表名称、描述、导航等基本信息(12)
课程简介 第12天,怎样在SharePoint 2013设置列表名称.描述.导航等基本信息. 视频 SharePoint 2013 交流群 41032413
- 第2章 Python基础-字符编码&数据类型 字符编码&字符串 练习题
1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以“位”为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bit = 1Byte ...
- Eclipse Oxygen创建maven web项目(二)
配置项目依赖库及第三方工具. 如示例的pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- 《自己动手写框架2》:用200行的DBF解析器来展示良好架构设计
因为工作关系.须要工作其中,须要读取DBF文件.找了一些DBF读取开源软件,要么是太过庞大,动不动就上万行.要么是功能有问题,编码,长度,总之是没有找到一个很爽的. 在万般无奈之下,我老人家怒从心头起 ...
- Java多线程框架Executor详解
原文链接 http://www.imooc.com/article/14377 为什么引入Executor线程池框架new Thread()的缺点 每次new Thread()耗费性能调用ne ...
- 三星 S4 手机误删除相片(相册)后的恢复问题,仅记录处理过程,其它Android手机同样适用
无意中删除了三星S4手机中相机的相册.过程是这样的,用手机拍了几张照片,觉得最后那张拍得不好,想删除,于是进入相册,看到有那张照片的图标,选择,删除,悲剧发生了! 这里得说三星的不好:在相册中,相册文 ...
- 将视频转换为 HLS(HTTP Live Streaming) 协议格式文件
就是将视频文件转码(H264+ACC).分片(n个.ts文件).生成列表(.m3u8) 方便网站提供视频播放服务,提升加载速度,节省流量. 1.准备好源视频文件. 2.下载 ffmpeg(http:/ ...
- 【Unity】11.1 角色控制器 (Character Controller)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制.如果要创建类人角色,可 ...
- 菜鸟学Java(四)——JSP内置对象
学习JavaWeb就离不开JSP,而学习JSP又不得不了解它常用的九个内置对象.今天来做一个简单介绍. request Request封装了用户提交的信息,通过调用Request相应的方法可以获取封装 ...