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

Struts2 TokenInterceptor防止表单重复提交

 
阅读更多

TokenInterceptor 防止表单重复提交。

由于某些原因,用户在进行类似表单提交的操作后,以为表单未被提交,会进行多次的重复提交。为了避免用户多次提交给服务器带来负荷。我们会对表单提交这样的操作进行一些处理,以告诉用户不要重复提交。下面我们建立 struts2token 项目 ,使用 struts2 token 拦截器来实现此案例。
步骤一,编写 login.jsp 页面,内容如下:
<%@ page language = "java" pageEncoding = "UTF-8" %>

<%@ taglib uri = "/struts-tags" prefix = "s" %>

< html >

    < body >

       < form action = "<%= request.getContextPath() %> /login.action " >

           姓名 : < input type = "text" name = "username" >< br >

           密码 : < input type = "password" name = "password" >< br >

           < input type = "submit" value = " 登录 " >

           < s:token ></ s:token >

       </ form >

    </ body >

</ html >
说明,此登录页面中的关键技术就是使用了标签库中的 < s:token ></ s:token > 标签,它的作用就是在用户访问此页面时会生成一个 sessionId ,在提交时会服务器会据此验证表单是否已提交。“ To set a token in your form, you should use the token tag . This tag is required and must be used in the forms that submit to actions protected by this interceptor ”,这句话的大概意思就是我们必须要在提交的表单中使用这个 token tag ,这样提交到的 Action 便能配置 TokenInterceptor 拦截器验证表单是否重复提交。
步骤二,编写 LoginAction ,主要代码如下:
package com.asm;
public class LoginAction extends ActionSupport {

    public String execute() throws Exception {

       System. out .println( "----> 执行 execute 方法 ..." );

       return SUCCESS ;

    }

}
步骤三, struts.xml 主要配置内容如下:
< struts >

    < package name = "tokenTest" extends = "struts-default" >

       < action name = "login" class = "com.asm.LoginAction" >

           < result name = "success" > /success.jsp </ result >

           < result name = "invalid.token" > /subError.jsp </ result >

           < interceptor-ref name = "token" ></ interceptor-ref >

           < interceptor-ref name = "defaultStack" ></ interceptor-ref >

       </ action >

    </ package >

</ struts >

说明:在此 Action 下,我们配置了 token 拦截器,另注意到在此 Action 下我们还配置了一个“ invalid.token result ,因为“ This interceptor uses a fairly primitive technique for when an invalid token is found: it returns the result invalid.token , which can be mapped in your action configuration ”。它的大概意思就是:提交时服务器如果根据 token 标签产生的 sessionId 判断出表单已提交,它则返回 invalid.token 指向的视图。比如这里,如果重复提交则会转到 .../subError.jsp 中去。另不要忘记了引入默认的拦截器栈。补充: 关于 token 拦截器更多细节可以访问 org.apache.struts2.interceptor.TokenInterceptor 类的api 说明。
步骤四,编写配置中所用到jsp 页面,这些页面编写简单,在此省去。
步骤五、发布测试,请注意访问login.jsp 页面时,查看源文件时会发现增加了两个隐藏域信息。
步骤六、更换拦截器:我们还可以使用
tokenSession 拦截器,它的功能比上面的增强,它能保证持有相同sessionId 的并发请求等待第一个完成之后才能被提交处理,但是它返回的是action 执行后的result. 接着上例,我们只需要在配置中作如下修改:把上面的 token 拦截器改成 < interceptor-ref name = "tokenSession" ></ interceptor-ref > 即可。随后便可以测试,测试时会发现如果我们重复提交,它总是返回到上一次的success.jsp 页面,但是它并不是经过LoginAction 中的execute 处理后返回( 我们System.out.print 语句在重复提交时并未打印出来) ,而是此拦截器判断出是重复后直接返回上一次提交转向的页面

分享到:
评论

相关推荐

    Struts2防止表单重复提交示例

    在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...

    Servlet、Struts、SpringMVC对于表单重复提交的解决方案

    2. **sessionToken机制**:Struts2框架提供了一个拦截器`TokenInterceptor`,它可以自动管理基于Session的令牌,防止重复提交。 3. **.strutsPrepareAndExecute interceptor**:这个拦截器可以处理表单的唯一性,...

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

    Struts2是一个流行的Java web框架,它...总的来说,Struts2的令牌机制是通过生成和验证令牌来防止重复提交和CSRF攻击的有效方式。开发者应当理解其工作原理,并在需要的地方正确使用,以提高应用程序的安全性和稳定性。

    Struts2 表单 重复提交

    "防止表单重复提交 token"是Struts2提供的一种解决方案,通过在请求中加入一个唯一的token来确保请求的唯一性和一致性。 首先,我们来看如何实现这个机制。在Struts2中,我们可以使用拦截器(Interceptor)来实现...

    sturts2防止表单的重复提交 token

    总的来说,Struts2的Token机制是一种有效防止表单重复提交的方法,它通过生成和验证唯一标识来确保每个请求的唯一性,从而保护了业务的正确性和数据的一致性。在实际开发中,根据项目需求和安全策略,我们可以灵活...

    struts2防止重复提交

    Struts2提供了几种策略来防止表单的重复提交,确保请求的唯一性和事务的一致性。 一、令牌(Token)机制 Struts2的Token插件是防止重复提交的一种常见方法。这里的"Strut2Token"很可能是指这个插件的应用。它的...

    Struts2 防重复提交Demo

    Struts2是一个流行的Java Web框架,它为开发者...通过上述步骤,Struts2的`s:token`标签可以帮助开发者有效地防止重复提交,保证Web应用程序的数据一致性。理解并正确使用这个功能,可以提升应用的健壮性和用户体验。

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

    在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于网络延迟或其他原因没有及时收到反馈,导致用户...

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

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

    struts2中token限制表单多次提交

    当用户尝试重复提交表单时,Struts2会检测到Token已经使用过,因此会抛出异常。你可以捕获这个异常并给出相应的提示,例如: ```java public class MyAction extends ActionSupport { @Override public void ...

    struts2_token控制刷新重复提交

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用...综上所述,Struts2的Token机制是防止Web应用中重复提交的有效工具,通过合理的配置和编程,可以为用户的操作提供更安全的环境。

    struts2token回退刷新

    4. **令牌回退**:当表单提交成功后,为了防止用户意外刷新页面导致重复提交,Struts2会清除服务器会话中的令牌。这种行为称为令牌回退,可以避免用户在不知情的情况下多次执行相同操作。 **二、防止重复提交** ...

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

    通过以上步骤,我们就能在Struts2框架下有效地防止重复提交。Token机制结合前端的防御措施,能为Java Web应用程序提供更加健壮的安全保障。在实际项目中,还可以根据需求进行更精细的定制,比如设置Token的有效时间...

    Struts2入门教程(全新完整版)

    5. TokenInterceptor防止表单重复提交。 34 6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉...

    struts2的令牌机制

    Struts2的令牌机制是其防止重复提交和CSRF(跨站请求伪造)攻击的一种重要安全策略。在Web开发中,尤其是使用MVC框架如Struts2时,确保用户请求的唯一性和安全性至关重要。令牌机制就是这样的一个工具,它通过在表单...

    struts2 拦截器(AOP,面向切面编程)

    **TokenInterceptor**是Struts2的一个特定拦截器,主要用于防止重复提交。在表单提交过程中,如果用户意外刷新页面,可能会导致数据重复录入。TokenInterceptor通过在客户端生成一个令牌(Token),并在服务器端检查...

    利用Struts2的令牌机制。

    在处理用户请求时,尤其是涉及到表单提交和防止重复提交时,Struts2提供了一种称为“令牌”(Token)的安全机制。这个机制主要用于防止跨站请求伪造(Cross-Site Request Forgery, CSRF)攻击,它是一种恶意用户在...

    jsp-struts2

    例如,添加一个用于进行表单重定向和防止重复提交的拦截器: ```xml &lt;interceptor name="token" class="com.example.TokenInterceptor"/&gt; ... ``` 最后,为了运行Struts2应用,需要在Web应用的`...

    struts令牌token实例

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

Global site tag (gtag.js) - Google Analytics