`
xiaoao808
  • 浏览: 43690 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Struts的Token

阅读更多

请求有效性处理,使用令牌可以有效的防止重复提交。
protected String generateToken(HttpServletRequest request) 创建一个令牌.
protected boolean isTokenValid(HttpServletRequest request) 检查令牌是否有效
protected boolean isTokenValid(HttpServletRequest request,Boolean reset) 检查令牌是否有效,并且重置令牌(如果reset 是true)
protected void resetToken(HttpServletRequest request) 重置令牌
protected void saveToken(HttpServletRequest request) 添加令牌

 

基本原理:

服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,
看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给
客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次
提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

 

 实例:

 

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/
package com.yourcompany.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/** 
 * MyEclipse Struts
 * Creation date: 08-01-2008
 * 
 * XDoclet definition:
 * @struts.action validate="true"
 * @struts.action-forward name="add" path="/add.jsp"
 
*/
public class ToAddAction extends Action {
    
/*
     * Generated Methods
     
*/

    
/** 
     * Method execute
     * 
@param mapping
     * 
@param form
     * 
@param request
     * 
@param response
     * 
@return ActionForward
     
*/
    
public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
    
// TODO Auto-generated method stub
    saveToken(request);
    
return mapping.findForward("add");
    }
}

 

这个Action主要作用就是在跳转的页面上加入Token,只有加入Token才能实现Token的验证。执行完这个Action后,跳转到的页面会出现类似如下的一个hidden控件

 

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="b030d9188a218097211d9061907cde5d"></div>

 

那么恭喜你,Token生效拉,注意,跳转到的页面里面,表单指可以用Struts标签来生成,不可以用HTML来生成,不然Token是无效的。

 

使用Token的第一步完成,第二步,在提交的Action中验证Token是否符合,代码如下:

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/
package com.yourcompany.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.lc.sqlhelp.Access;
import com.yourcompany.struts.form.AddForm;

/**
 * MyEclipse Struts Creation date: 08-01-2008
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/add" name="addForm" input="/form/add.jsp"
 *                scope="request" validate="true"
 * @struts.action-forward name="add_suc" path="/add_suc.jsp"
 * @struts.action-forward name="add_fail" path="/add_fail.jsp"
 
*/
public class AddAction extends Action {
    
/*
     * Generated Methods
     
*/

    
/**
     * Method execute
     * 
     * 
@param mapping
     * 
@param form
     * 
@param request
     * 
@param response
     * 
@return ActionForward
     
*/
    
public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
    AddForm af 
= (AddForm) form;
    
if (isTokenValid(request, true))//验证Token是否符合要求
 {
        String sql 
= "insert into user (username,password) values('"
            
+ af.getUsername() + "','" + af.getPassword() + "')";
        System.out.println(sql);
        Access sh 
= new Access();
        sh.loadMyDriver();
        sh.setMyConnection();
        sh.createMyStatement();
        sh.executeMyUpdata(sql);
        sh.closeMyStatement();
        sh.closeMyConnection();
        
return mapping.findForward("add_suc");
    }
    
return mapping.getInputForward();
    }
}

 

这样就完成了防止表单重复提交的功能。

实例源码下载

分享到:
评论

相关推荐

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

    ### Struts Token机制防止页面刷新及重复提交 在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于...

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

    Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...

    struts token dozer实例

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

    struts token的例包

    在Struts框架中,Token机制是一个重要的安全特性,用于防止重复提交(Double Submit)和跨页请求伪造(Cross-Site Request Forgery, CSRF)攻击。下面将详细解释Struts Token的工作原理、应用场景以及如何在实际项目...

    JavaEE Struts2利用tokenSession防止重复提交

    总结,Struts2的tokenSession机制是JavaEE Web开发中防止重复提交的有效手段,通过生成并校验token,确保每个请求的唯一性,从而保护了业务数据的完整性。在实际项目中,我们需要正确配置和使用这个机制,以提高应用...

    struts2中token限制表单多次提交

    Struts2提供了Token插件来解决这个问题,确保每个表单提交只能被执行一次。下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间...

    struts2的token实现.

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

    struts2token回退刷新

    Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...

    struts2_token控制刷新重复提交

    3. **验证Token:** 在处理表单提交的Action方法中,Struts2的Token拦截器会自动进行Token验证。如果验证失败(比如因为用户刷新页面),拦截器会抛出一个`TokenException`,你可以捕获这个异常并处理。 ```java ...

    struts令牌token实例

    &lt;interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/&gt; &lt;!-- other interceptors --&gt; &lt;interceptor-ref name="token"/&gt; &lt;!-- other interceptors --&gt; ``` 这样,...

    struts 令牌机制(Token)

    在Struts框架中,令牌机制(Token)是一种防止重复提交的有效方法,它主要用于处理表单数据的并发控制,防止用户意外或者恶意地多次提交表单,从而确保数据的一致性和安全性。 在Web应用中,用户可能会因为网络延迟...

    利用struts的token控制重复提交

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

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

    而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理。 首先,理解为何需要令牌。在Web应用中,用户可能会意外或恶意地多次点击...

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

    在Struts的配置文件中定义一个Token拦截器,拦截所有需要防止重复提交的Action,然后在拦截器中实现Token的验证逻辑。 通过这种方式,Struts+Token机制可以有效地防止由于用户误操作或者网络延迟造成的表单重复提交...

    用STRUTS的TOKEN机制解决表单重复提交,转载自:百度文库

    Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...

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

    当用户提交表单时,Struts2的Token拦截器会自动检查Token的有效性。如果Token已经使用过或者不存在于session中,那么`isTokenValid()`会返回`false`,此时可以抛出异常或者返回一个错误页面,提示用户重新尝试。 6...

    用Struts的Token机制解决表单重复提交.doc

    ### 使用Struts Token机制解决表单重复提交 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题。用户可能因为网络延迟、浏览器缓存等原因导致重复点击提交按钮,进而向服务器发送多个相同的...

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

    ### 解决Struts中通过Token防止重复提交的问题 在Web应用程序开发中,特别是基于MVC架构的框架如Apache Struts中,确保用户操作的安全性是非常重要的。其中一项常见且重要的安全措施是防止表单的重复提交。本文将...

    Struts之Token解决表单那重复提交

    &lt;input type="hidden" name="struts.token" value="&lt;s:property value="#session.token"/&gt;" /&gt; ``` 4. **验证Token** 在Action的`execute()`方法中,首先检查Token是否有效。如果Token已经存在于会话中并且与...

    struts2开发 token.rar

    这个名为"struts2开发 token.rar"的压缩包文件可能包含了一个关于如何在Struts2框架中实现Token机制的示例项目。Token机制主要用于防止重复提交,是Web开发中的重要安全实践。 首先,我们来看`.classpath`、`....

Global site tag (gtag.js) - Google Analytics