`
c840898727
  • 浏览: 3408 次
社区版块
存档分类
最新评论

不用struts2的token机制,手动防止表单数据重复提交

阅读更多
struts2的拦截器实现了防止表单重复提交的功能,即token拦截器,在表单提交页面写上<s:token/>,在struts.xml配置文件中相应的action上配置拦截器
此拦截器只能用在有form的提交请求上。如果是通过url链接请求action,就只能手动控制了。请参考“struts2中采用url链接的action请求如何防止重复提交”

// 配置如下
<action name="cbApplySubmit" class="CBApplyAction"
            method="cbApplyFromSubmit">
<interceptor-ref name="tokenStack" />
<result name="input" type="ivTiles">
                <param name="attMap">
                    #{'main':'/assets/businessChange/addChangeBusiness.jsp'}
                </param>
            </result>
<result type="redirect-action" name="invalid.token">
<param name="actionName">queryCB</param>
<param name="namespace">/assets/businessChange</param>
</result>

// 页面如下,注意要加在form里面
<s:form method="POST" action="cbApplySubmit" name="anewApplyForm" namespace="/assets/businessChange">
<s:token />
//.//
</s:form>

要是不使用struts2的拦截器,如何防止表单重复提交呢?在struts2里面实现比较简单

1.在跳转到表单填写页面的action里面往session放一个值
public String execute() throws Exception {
// 向session中放置一个值
        ActionContext actionContext = ActionContext.getContext();
        Map session = actionContext.getSession();
        session.put("session_value", Math.random() + "");

        return SUCCESS;
    }

2.在表单填写页面加上接收session值的隐藏域,sub是定义在action里面的一个属性,提供get set方法即可

<input type="hidden" name="sub" value="${session_value}"/>
3.在action提交的方法中判断页面提交过来的sub是否不为空,并且等于从session中取出的session_value的值
如果满足,先移除session里的那个值,再执行提交表单操作;如果不满足,就是重复提交,不会提交表单

public String cbApplyFromSubmit() throws Exception {
// 将页面hidden提交的值和session中的值比较
        ActionContext actionContext = ActionContext.getContext();
        Map session = actionContext.getSession();
        String obj = (String) session.get("session_value");
        if (sub != null && sub.equals(obj)) {
            session.remove("session_value");
                        // 保存数据
            chBusiness.saveCBApplyForm(changeApplyFormBO);
            return SUCCESS;
        } else {
            return "invalid";
        }
    }
分享到:
评论

相关推荐

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

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

    Struts2防止重复提交解决方案

    本文将深入探讨Struts2防止重复提交的解决方案,包括拦截器的配置、重复提交的原因以及`token`机制的工作原理。 首先,了解Struts2拦截器的基础知识是至关重要的。在Struts2框架中,拦截器是基于AOP(面向切面编程...

    struts令牌token实例

    通过以上步骤,你可以实现一个基本的Struts2令牌机制,有效地防止重复提交问题。记住,令牌机制虽然能提供一定的防护,但并不是万能的,还需要结合其他安全措施,如CSRF防护,以确保应用的安全性。 在你提供的...

    struts token dozer实例

    在处理表单提交时,Struts提供了一种Token机制来防止重复提交和跨站请求伪造(CSRF)攻击。Token是在服务器端生成的一个唯一标识,通常会附加到表单中,当用户提交表单时,服务器会验证这个Token是否有效,从而确保...

    struts1的令牌解决页面重复提交问题

    通过以上步骤,Struts1的令牌机制可以有效地防止页面的重复提交,保护业务数据的完整性。然而,随着技术的发展,现代框架如Spring MVC、Struts2等提供了更完善的解决方案,例如利用HTTP的幂等性或一次性令牌(如CSRF...

    使用struts的同步令牌避免form的重复提交

    为了解决这个问题,Struts提供了一种称为“同步令牌”(Synchronizer Token)的机制,用于防止表单的重复提交。 同步令牌的工作原理是:当用户请求一个包含表单的页面时,服务器会在表单中生成一个唯一的令牌,并将...

    struts2 令牌使用例子

    在处理表单提交时,为了防止重复提交或者跨站请求伪造(CSRF)攻击,Struts2引入了令牌机制。这个"struts2 令牌使用例子"是一个很好的实践教程,帮助开发者理解如何在实际应用中实施这一安全策略。 首先,我们需要...

    struts2 详解文档

    24. **防止重复提交**:可以使用s:token标签防止表单重复提交的问题。 25. **Struts2整合Spring和Hibernate**:Struts2与Spring的整合可以实现依赖注入,与Hibernate的整合则方便进行持久化操作。 以上就是Struts2...

    Struts应用技巧

    在本篇文章中,我们将探讨几个关键的Struts应用技巧,包括如何利用Token解决重复提交问题、copyProperties的用法、文件上传的实现以及更多其他相关内容。 1. **利用Token解决重复提交** 在Web应用程序中,用户可能...

    Struts2的总结和Strut2集成Spring

    Struts2提供了一些新的表单标签,如`&lt;s:checkboxlist/&gt;`, `&lt;s:doubleselect/&gt;`和`&lt;s:token/&gt;`,它们分别用于生成复选框列表、双重选择列表和防止跨站请求伪造的令牌。 #### 结论 Struts2与Spring的集成不仅增强了...

    Struts2内置拦截器简介

    - **用途**:防止表单重复提交,通过在每次提交时生成一个唯一的令牌,并在服务器端进行验证。 24. **Token Session (会话令牌)** - **说明**:与Token拦截器类似,但使用`HttpSession`存储令牌,适用于需要长...

    深入浅出Struts2(附源码)

    第15章防止重复提交 252 15.1 标记管理 252 15.2 使用Token拦截器 253 15.3 使用Token Session拦截器 256 15.4 小结 257 第16章调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能...

    Struts2.1学习笔记

    - **token防止表单重复提交**:使用`&lt;s:token&gt;`标签可以生成一个隐藏字段,防止用户多次提交同一个表单。 通过以上内容的学习,可以全面了解Struts2.1框架的核心特性和使用方法,这对于开发者来说是非常宝贵的资源...

    Struts_2.0从入门到精通

    Struts2.0引入了一系列新的表单标签,如、、&lt;s:token&gt;等,它们提供了更丰富和灵活的表单元素,支持客户端验证和服务器端验证的无缝集成。 十三、Struts2.0与AJAX的融合 AJAX技术的兴起,为Web应用带来了全新的交互...

    Strtus2权威指南

    Struts2的类型转换机制使得表单数据可以自动转换为Action类中的属性类型,减少了手动转换的工作。同时,Struts2提供了强大的国际化支持,通过资源文件可以实现多语言环境下的应用。 此外,Struts2与Spring框架的...

Global site tag (gtag.js) - Google Analytics