防重复提交其实很简单,首先我们用普通的XML配置来理解一下:
1) 只要在jsp里面必须加上一个token标签
<s:token name="token"></s:token>
加完之后你可以浏览器里查看源代码,看看这个标签生成什么样的HTML标签了。不出意外,应该有类似如下两句:
<input type="hidden" name="struts.token.name" value="token" />
<input type="hidden" name="token" value="I3Q3IKH98IFQ5E8L48MP9WI9BGRK2GT7" />
是两个表单都是隐藏表单,里面有一个36位的加密的值,这也是struts2自动生成的,而且它把这个值存到了session里,当第一次提交表单时它会进行比较,如果一样的可以提交反之不许提交,这是struts2的拦截器做的。
2)加上这个还不行,因为struts2用的是拦截器进行执行的,可以到struts-default.xml里看看这个拦截器是不是被加入了struts-default里面,显而没有加入,这得自己进行配置了,在 struts.xml 给自己的action 里加入一个拦截器
<action name="t" class="com.tx.action.TAction" method="test">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
如果你在action里加上了自己的拦截器那么默认的拦截器不起作用了,你得自己手动再加入,否则好多功能不能用了。
一定要把 <s:token name="token"></s:token> 放在表单里面 form 里面,否则报一个
警告: Could not find token name in params.
理解了上面后,来看看注解配置:
@Action(value="userTrans",
interceptorRefs = {
@InterceptorRef("token"),
@InterceptorRef("defaultStack")
},
results={
@Result(name="invalid.token", type = "redirect", location = "/accessLogin.action"),
@Result(name="success", location="/page/account/trans/transfer_submit.jsp"),
@Result(name="failuer", type = "redirect", location = "/accessLogin.action")
}
)
将此配置放置在对应的action方法前,即可。
分享到:
相关推荐
对于防止重复提交,可能需要添加`token`或`token-session`拦截器。 5. **安全性考虑** 在实现文件上传和下载时,务必注意安全性问题。比如,防止文件名注入以绕过安全控制,限制上传文件的大小和类型以防止DoS攻击...
Struts2提供了内置的验证机制,可以使用注解或XML配置文件定义验证规则。当验证失败时,错误信息可以通过`ActionError`或`FieldError`对象添加到ActionContext中。在JSP页面中,可以使用`<s:fielderror>`或`...
1. **配置Action**: 在Struts配置文件(如struts.xml)中,为需要防止重复提交的Action添加`token`拦截器。 ```xml <result name="success">/success.jsp <result name="input">/input.jsp ``` 2. **创建...
防止表单重复提交是Web开发中的一个重要功能,为了避免重复提交造成的数据重复或错误,Struts2同样提供拦截器实现这一功能。可以配置token拦截器来为每个请求生成一个令牌(token),并将这个令牌存储在客户端。提交...
Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...
- 使用Token机制防止重复提交。 - 在`struts.xml`中配置Token拦截器。 - 在Action类中处理Token验证逻辑。 #### 八、杂项 **8.1 常见问题解答** - **问题汇总**:针对Struts2开发过程中常见的问题进行总结和解答...
防止表单重复提交是Web开发中的常见问题,Struts2通过令牌机制来解决这个问题,避免了同一操作被多次执行。 项目练习部分涉及到使用Ajax实现异步请求并返回JSON数据,这通常通过Struts2的JSON插件实现。文件下载则...
Struts2提供了一种灵活的数据验证机制,可以通过注解或者XML配置文件实现。你可以为每个字段定义验证规则,如非空检查、长度限制、格式校验等。当验证失败时,Struts2会自动将错误信息返回到页面,帮助用户修正输入...
当用户尝试重复提交表单时,Struts2会检测到Token已经使用过,因此会抛出异常。你可以捕获这个异常并给出相应的提示,例如: ```java public class MyAction extends ActionSupport { @Override public void ...
5. TokenInterceptor防止表单重复提交。 34 6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉...
在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...
开发者需要了解如何定义Action类,如何使用注解或XML配置文件来配置它们,以及如何使用Execute-and-Redirect模式来防止重复提交。 接下来,Struts 2的配置文件是理解和使用框架的重要部分。可能包括了struts.xml或...
在struts.xml或action类的注解中,你可以设置`result`元素的`type`属性为`redirectAction`来配置重定向结果。例如: ```xml <param name="actionName">anotherAction <param name="namespace">/...
### 知识点十三:防止重复提交 #### 13.1 问题背景 在Web应用中,由于网络延迟等原因,用户可能会不小心多次点击提交按钮,导致数据重复提交。 #### 13.2 解决方案 - **Token机制**:每次提交前生成一个唯一的...
3. **配置与注解**:Struts2支持XML配置和注解方式,允许开发者灵活地定义Action、结果类型、参数绑定等。这使得系统配置更加简洁明了,减少了配置文件的复杂度。 4. **OGNL(Object-Graph Navigation Language)**...
重定向在实际应用中的常见用途包括登录验证、防止重复提交、页面跳转等。在设计重定向时,需要注意避免无限循环重定向和安全问题,例如在登录验证失败时,不应重定向到登录页面,而应返回错误信息。同时,合理使用...
15.3 使用令牌防止表单重复提交 313 15.3.1 使用s:token/表单标签 313 15.3.2 令牌拦截器规则的例外 314 15.4 自动显示等待页面 316 15.5 完成CRUD操作的一个动作 317 15.5.1 CRUD 317 15.5.2 拦截器和接口 318 ...
3. 防止重复提交:可以使用令牌(Token)机制防止用户意外或恶意的重复登录请求。 4. 用户验证:除了用户名和密码外,还可以加入验证码、邮箱验证等方式提高安全性。 综上所述,使用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 性能...