Struts 2.x防止表单的重复提交——Token
发布时间:2021-11-21 20:44:54 所属栏目:教程 来源:互联网
导读:(1) 避免表单的重复提交的方式: 采用HttpServletRequest.sendRedirect()方法将客户端重定向到成功页面。 在客户端通过JavaScript实现; 在服务端编写代码实现。 (2) 在服务器端避免表单重复提交,通常是采用同步令牌的方式来实现,其基本的原理如下: (
(1) 避免表单的重复提交的方式: Ø 采用HttpServletRequest.sendRedirect()方法将客户端重定向到成功页面。 Ø 在客户端通过JavaScript实现; Ø 在服务端编写代码实现。 (2) 在服务器端避免表单重复提交,通常是采用同步令牌的方式来实现,其基本的原理如下: (1)用户访问包含表单的页面,服务器端在这次会话中,创建一个Session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域(元素的type属性为hidden)的值, 随表单一起发送到客户端,同时将令牌值保存到Session中。 (2)用户提交页面,服务器端首先判断请求参数中的令牌值和Session中保存的令牌值是否相等,如果相等,则淸除Session中的令牌值,然后执行数据处理操作。如果不相等,则提示用户己经提交过了表单,同时产生一个新的令牌值,保存到Session中。当用户重新访问提交数据页面时,将新产生的令牌值作为隐藏输入域的值。 (3) Struts 2的实现方式: (1)需要在表单中使用标签,并置定一个令牌的名称。例如: (2)为Action类配置应用TokenInterceptor或者TokenSessionStoreInterceptor拦截器,这两个拦截器已经在struts-default.xml中定义,但没有包含在default拦截器栈中. 范例:避免重复提交表单 TokenAction.java: import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class TokenAction extends ActionSupport implements ModelDriven<User> { private static final long serialVersionUID = 7502909137522615270L; private User user=new User(); @Override public User getModel() { return user; } @Override public String execute() throws Exception { if ("qiang".equalsIgnoreCase(user.getName())&&"1234".equals(user.getPassword())) { return SUCCESS; } else { return ERROR; } } } User.java: public class User { private String name; private String password; //省略getter与setter方法 } token_login.jsp: <body> <s:form action="token"> <s:textfield name="name" label="姓名"></s:textfield><br> <s:password name="password" label="密码"></s:password><br> <s:token></s:token><br> <s:submit value="提交"></s:submit><br> </s:form> </body> struts.xml <package name="token" extends="struts-default"> <action name="token" class="com.mzsx.token.TokenAction"> <result name="success">/s15/success.jsp</result> <result name="invalid.token">/s15/error.jsp</result> <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |