`

Struts2_token原理

 
阅读更多

via: http://www.cnblogs.com/iyangyuan/archive/2013/05/05/3060488.html

 

首先需要说明的是,在struts2框架中使用令牌基本上就是两步:

1.在jsp页面中使用<s:token></s:token>标签,可以放在表单中任何位置,这个标签的作用就是在页面中产生一个token id,可以通过“查看源文件”的形式看到。为什么要放在表单中呢?因为这个是要提交到服务器的,要不然服务器怎么知道你的id是多少?

2.在struts2核心配置文件中为token拦截器添加参数,来指明需要拦截哪些方法,例如:<interceptor-ref name="token"><param name="includeMethods">save</param></interceptor-ref>,指明拦截save方法。当然也可以用excludeMethods来声明不拦截哪些方法。

 

令牌生成原理图:

从图中可以看出,如果某个jsp页面中有token标签,那么无论是请求这个界面还是内部转发到这个界面,我们统一说成是“渲染界面”的时候,都会造成token id的产生或者更新。

一定要搞清楚,这里是请求的jsp页面,此时可以产生令牌,但令牌不会起作用,因为它拦截的不是jsp,而是通过反射机制调用的方法。

 

令牌拦截原理图:


从图中可以看出,令牌可以拦截的是Action中的方法。

如果方法需要被拦截,会判断session中的token id和提交过来的token id是否相等。如果不相等,则直接跳转到预先配置好的界面,session中的token id不变;如果相等,则执行请求的方法,关键的一点是,此时session中的token id会被清空!这个步骤非常关键!

 

综上,关于令牌的使用,记住以下几点,基本可以应对各种复杂的令牌应用场景

注意令牌的产生时机,它是在加载(或渲染)带有token标签的jsp页面时产生的,与请求或者转发无关,与方法是否被拦截无关。

由于服务器端的token id是保存在session中的,因此不同的页面间可以共享,使用时注意,避免混乱。

如果访问的方法属于被拦截的方法,验证通过之后,会清空session中的token id;如果验证不通过,session 中的token id不变,直到下一次加载(或渲染)带有token标签的jsp页面。

  • 大小: 16.8 KB
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    struts2的token实现.

    在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...

    struts2中token限制表单多次提交

    下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间传递一个唯一的标识符(Token)来防止表单的重复提交。当用户首次提交表单时...

    JavaEE Struts2利用tokenSession防止重复提交

    Struts2提供了一种机制,即tokenSession,来解决这个问题。 首先,我们要理解什么是重复提交。在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据...

    struts2开发 token.rar

    Struts2是一个非常著名的Java Web框架,用于构建企业级应用。这个名为"struts2开发 token.rar"的压缩包文件可能包含了一个关于...通过研究和实践,开发者能够更好地理解Struts2的架构和工作原理,提升自己的开发技能。

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_9_拦截器 共32页.pptx

    **知识点2:拦截器的工作原理** - **工作流程**: 当用户请求到达Struts2框架时,框架会根据配置查找对应的Action并创建实例。在Action执行前后,框架会执行一系列预设好的拦截器方法。 - **目的**: 这些拦截器可以...

    struts1.2之token解决重复提交

    在Struts1.2中,Token机制是通过`org.apache.struts.action.TokenAction`类实现的。这个类提供了一个`execute()`方法,该方法会检查Token并处理请求。为了使用Token机制,你需要在Action配置文件中添加相应的配置,...

    struts2的工作原理

    - **org.apache.struts2.components**:封装视图组件,Struts2在视图组件上做了很大加强,新增了多个组件,如`updownselect`、`doubleselect`、`datetimepicker`、`token`、`tree`等。 - **org.apache.struts2....

    struts token 防止页面刷新,重复提交

    #### 一、Token机制原理 Token机制是一种常见的防止重复提交的方法,其核心思想是为每一次表单提交生成一个唯一的Token值,并将这个Token值存储在客户端(通常是在表单中作为一个隐藏字段),同时也在服务器端记录...

    struts2 令牌使用例子

    1. **配置Struts2拦截器**:在struts.xml配置文件中,需要添加`token`和`tokenSession`拦截器到默认栈或自定义的拦截器栈中。`token`拦截器负责在表单中插入令牌,而`tokenSession`拦截器则负责验证令牌。 ```xml ...

    Struts1.x令牌(Token)的使用.rar

    2. 实现TokenAware接口:为了让ActionForm能够访问session中的令牌,需要让ActionForm实现`org.apache.struts.action.TokenAware`接口,并实现`setToken(String token)`方法。 3. 生成令牌:在Action中,如`execute...

    Struts2+Hibernate+Spring4 整合微信登录demo

    **Struts2+Hibernate+Spring4 整合微信登录demo** 该项目是一个综合示例,旨在帮助初学者了解如何将流行的Java开发框架Struts2、Hibernate和Spring4整合在一起,并实现微信登录功能。这三个框架在企业级Java应用...

    用struts使用Token机制来实现防重复提交

    首先,我们需要在Struts2的配置文件(struts.xml)中添加Token拦截器。这个拦截器会处理Token的生成和验证过程。例如: ```xml &lt;interceptor name="token" class="org.apache.struts2.interceptor....

    解决在struts 中可以通过token 来重复提交的问题

    #### 二、Token机制的原理 为了解决这一问题,一种常见的做法是在客户端(通常是浏览器)和服务器端之间传递一个随机生成的唯一标识符(Token)。当用户首次提交表单时,服务器会验证该Token是否有效。如果Token...

    15年9月传智播客视频struts2

    - **内置拦截器**:Struts2提供了一系列内置拦截器,如`params`(参数填充)、`token`(防止重复提交)、`servletConfig`(获取Servlet配置信息)等。 - **自定义拦截器**:可以通过实现`Interceptor`接口或继承`...

    struts token dozer实例

    Struts Token Dozer实例主要涉及的是Java开发中的两个关键组件:Apache Struts和Dozer。Apache Struts是一种广泛使用的开源MVC(Model-View-Controller)框架,它为Java Web应用程序提供了一种组织代码和控制应用...

    struts token的例包

    下面将详细解释Struts Token的工作原理、应用场景以及如何在实际项目中实现。 Token机制的核心思想是在用户发起敏感操作时,服务器生成一个随机的、一次性使用的Token,并将其存储在服务器端和客户端(通常为...

    利用struts的token控制重复提交

    为了解决这个问题,Struts提供了一个名为“Token”的机制。 **一、Struts Token机制** Struts的Token机制主要用来防止用户意外或恶意的多次提交表单,例如在刷新页面时重复提交数据。它的工作原理如下: 1. **...

    struts token机制解决表单重复提交

    下面将详细介绍Struts Token的工作原理、实现方式及其重要性。 一、工作原理 Struts Token机制的核心思想是在客户端(浏览器)和服务器端(应用服务器)之间维持一个唯一的令牌(Token)。当用户首次提交表单时,...

Global site tag (gtag.js) - Google Analytics