学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(2)
来源:互联网 发布:网页提取软件 编辑:程序博客网 时间:2024/05/16 20:22
- <event-handler name="Logon">
- <broadcasts />
- <views>
- <include name="body" template="dspLogon.cfm" />
- </views>
- <results />
- </event-handler>
像大多数网站,我们的应用将有注册和登陆页面。但我们怎么处理安全的问题?通常我们在Application.cfc文件里使用onRequestStart来确认一个请求是否合法,因此,举例来说,我将做如下一些事 如果一个请求来自未登陆和未注册者,我们将迫使他去那里,被废弃此次请求。
但我们在Model-Glue框架里怎么实现呢?让我们确认一些事实:Model-Glue框架定义了事件。这些事件明确定义了该Web应用能做什么。我们使用的默认的应用模板有两个事件:Home 和 Exception。当我们以非事件方式启动应用,它将使用配置文件里的默认事件。在我们这,就是Home模板。所以让我们从使Home模板安全化着手
事件能够并且将会广播消息,当我第一次在快速手册里读到这点,并没有重视。我脑子里的看法是:有时事件需要额外的信息(比如:“我登陆了吗”),而且当事件触发时事件需要那些信息。你的事件甚至能根据结果处理。
那么我们怎么使用它呢?我们已经知道我们需要浏览者注册登录。所以我们可以修改Home事件来检查用户是否登录。如果他们没有,我们可以迫使他们跳到登陆界面。以下是修改好的版本:
- <event-handler name="Home">
- <broadcasts>
- <message name="getAuthenticated" />
- </broadcasts>
- <views>
- <include name="body" template="dspBody.cfm" />
- <include name="main" template="dspTemplate.cfm" />
- </views>
- <results>
- <result name="notAuthenticated" do="Logon" />
- </results>
- </event-handler>
现在我们需要控制器来监听这事件。你也许会问-我为什么必须这样做?其他什么的不能监听事件吗。Model-Glue的例子应用只有一个控制器,但是真正商业应用也许会有许多个。你将发现我们能告知控制器去监听“Foo”事件但调用的是“goo”方法。这在你的控制器改变时尤为有用,因为它可以让我们保持事件使用原有的名字。所以请你找到你的控制器模块,找到myController,在onRequestEnd后添加一个新的消息监听器:getAuthenticated。整个模块如同下面代码:
- <controllers>
- <controller name="myController" type="controller.Controller">
- <message-listener message="OnRequestStart" function="OnRequestStart" />
- <message-listener message="OnRequestEnd" function="OnRequestEnd" />
- <message-listener message="getAuthenticated" function="getAuthenticated" />
- <!-- Message-Listener Template
- <message-listener message="BroadcastMessageName" function="ControllerFunctionToFire">
- <argument name="AnEventArgument" value="aValue" />
- </message-listener>
- -->
- </controller>
- </controllers>
- 如果你需要,你可以去掉注释,这里只是让你学习注释格式,正如你所看到的,我们添加了getAuthenticated监听器,它负责调用控制器里的同名方法。现在让我们添加方法到我们的控制器。打开controller/Controller.cfc文件,在OnRequestStart之前加入以下代码:
- <cffunction name="getAuthenticated" access="public" returntype="void" output="false" hint="I return if the user is authenticated.">
- <cfargument name="event" type="ModelGlue.Core.Event" required="true">
- <cfset arguments.event.addResult("notAuthenticated") />
- </cffunction>
还好你还跟得上俺-_-#既然我们一直返回未验证,那么Home Event将会触发登录事件,我们需要增加代码:
- <event-handler name="Logon">
- <broadcasts />
- <views>
- <include name="body" template="dspLogon.cfm" />
- </views>
- <results />
- </event-handler>
这段代码与前面的Home事件相当相似,我不打算广播任何事件:我只是单单包进来一个登录模板,注意到 Home事件使用了两个视图。一个称为内容模板,一个称为显示模板,通常登陆页面与其他页面显示不太一样,虽然至今我们的登陆页面dspLogon.cfm还很难看,但有行代码值得注意:
- <form action="#viewstate.getValue("myself")#logonattempt" method="post">
今天讲了很多,总结一下(o(∩_∩)o...这段不译了,哪位路过的Helpe一下...):
The first thing I did was add a new setting, DSN, to my ModelGlue.xml file. This setting will be available to my code. You can think of it like Application variables.
* I modified the Home event to broadcast an event. This event checks to see if we are logged in.
* I modified the controller to check and see if the user is logged on. For this release, I simply made it return false. I did this by adding a result to my event that the Home event will notice.
* I added the Logon event to handle displaying the logon form. Any request for the site's Home event will now force you to logon if you haven't done so.
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(2)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(前言)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(1)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(3)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(4)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(5)
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(6)
- Model-Glue:Flex框架快速入门
- Easy ColdSpring in Model-Glue
- 胶水代码(glue code)的定义(粘合代码)
- Backbone系列:Model的学习
- EF框架—Model-First
- Jena使用教程---RDF MODEL的理解
- Model First
- ORM系列之二:EF(4) Model First
- EF框架step by step(2)—Model-First
- 胶连逻辑(glue logic)、FPGA里面的jitter,skew含义
- 深度学习框架提供的“Model Zoo“
- 无法创建SSP,没有索引器,如何打开search服务
- eos程序员培训教程2(连载)
- javascript之函数作用域和闭包[function scope and closure]
- Shark类库,优雅的数据访问操作(clone from cnblog 08年07月17日)
- EasyAVS v1.20 AVS辅助生成工具
- 学习Model-Glue框架的系列教程-Building your first Model-Glue Application中文理解通俗版(2)
- 65个源代码网站
- 第2天c#
- Interfaces in C# (For Beginners)
- ORACLE的基本术语
- 异常处理总结 (clone from cnblog 08年07月24日)
- MOSS字段编辑权限控制方案(3)-重写表单字段呈现逻辑
- xalan.jar版本引发的问题
- [转载]中国移动3G手机测试记