首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.6.2  使用TokenInterceptor

在配置文件中为action定义com.opensymphony.webwork.interceptor.TokenInterceptor,就可以根据Web请求参数来验证标记(token)了。想要保证interceptor正常工作,我们首先应该确保以下条件:

l         表单中的token标签应该生成一个标记(token)值并保存在session中。

l         当前标记(token)值是为这个标记(token)名称保存的最后一个值。

l         在验证前一个请求时没有使用这个标记(token)。

TokenInterceptor利用utility类从请求中得到这个标记(token),以下是获取标记(token)的基本步骤。

(1)通过在请求中检查标准标记(token)名称参数得到标记(token)名称。如果这个参数在请求中存在,那么给出指定标记名称。

(2)如果标记(token)名称被发现,根据这个标记(token)名称在请求中查找标记(token)的值。

(3)如果在请求参数中发现标记(token)的值,再根据上面得到的标记(token)名称从session中获取标记(token)的值。

(4)如果从session中得到的标记(token)值等于从请求参数中得到的标记(token)值,那么从session中删除标记(token)(防止这个标记被再次使用)并调用handleValid Token(invocation)方法;如果两个值不相等,调用handleInvalidToken(invocation)方法。

就像在注释中说明的那样,最后这一步非常重要,这是因为另一个继承至Token- Interceptor的token interceptor将覆盖这些方法。在TokenInterceptor中,handleInvalid- Token()方法添加一个错误消息到这个action(如果这个action实现了ValidationAware接口)并返回INVALID_TOKEN_CODE,INVALID_TOKEN_CODE是一个定义在TokenInterceptor中值为invalid.token的常量。返回这个代码时,它会被用于查找action的结果,而不会执行这个action,这样你可以确保你的action只在标记(token)值验证通过以后执行。在action的配置中,会定义一个映射到invalid.token的结果,这个结果通过一个特殊的页面提示请求被重复提交。TokenInterceptor的handleValidToken()会通过执行invocation.invoke()方法按照顺序调用剩下的interceptor和action。这个interceptor有效地扮演了类似于网管的角色,阻止了重复提交和没有有效标记(token)的请求。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论